【问题标题】:LoopBack Remote Methods and Access to Model DataLoopBack 远程方法和对模型数据的访问
【发布时间】:2015-01-27 19:16:22
【问题描述】:

我已经为此工作了几个小时,但我完全迷失了,因为环回文档没有帮助。

我正在尝试将应用程序逻辑写入模型。这方面的文档是here。不幸的是,除了将外部值传递给远程方法并再次返回之外,该示例没有展示任何有用的东西。我想了解如何在这种情况下运行查询并访问模型数据,但我已经搜索了几个小时,甚至无法找到有关这些简单任务的文档。也许我只是在寻找错误的地方。有人可以帮忙吗?

【问题讨论】:

    标签: node.js loopbackjs


    【解决方案1】:

    通常,您可以通过所有模型获得的内置方法来完成大多数您想做的事情,例如查询和访问模型数据(CRUD 操作);见http://docs.strongloop.com/display/LB/Working+with+data。为这些定义远程方法(自定义 REST 端点)将是多余的。

    如果您愿意,您可以在远程方法代码中访问标准 model CRUD Node APIs(例如 myModel.create()、myModel.find()、myModel.updateAll())。

    您还可以在https://github.com/strongloop/loopback-example-app-logic中找到更多相关示例

    这是一个使用入门应用程序https://github.com/strongloop/loopback-getting-started 应用程序的示例。它定义了一个远程方法,该方法接受一个数字 arg 并将具有该 ID 的咖啡店的名称打印到控制台:

    这段代码在common/models/coffeeshop.js:

    module.exports = function(CoffeeShop) {
    ...
      // Return Coffee Shop name given an ID.
      
      CoffeeShop.getName = function(shopId, cb) {
        CoffeeShop.findById( shopId, function (err, instance) {
            response = "Name of coffee shop is " + instance.name;
            cb(null, response);
            console.log(response);
        });
      }
    ...
      CoffeeShop.remoteMethod (
        'getName', 
        {
          http: {path: '/getname', verb: 'get'},
          accepts: {arg: 'id', type: 'number', http: { source: 'query' } },
          returns: {arg: 'name', type: 'string'}
         }
      );
    };

    您可以使用 API Explorer 加载 http://0.0.0.0:3000/explorer/#!/CoffeeShops/getName,然后输入一个数字(应用程序中最初只有三个咖啡店)作为查询参数,然后点击“试试看!”

    或者只是获取一个像http://0.0.0.0:3000/api/CoffeeShops/getid?id=1这样的URL

    兰德

    【讨论】:

    • 感谢您的回答,也许我的做法是错误的,但我认为我的问题比您想象的更基本。模型的属性存储在哪里?如果我想从common/models/Person.js 中定义的远程方法内部console.log“人员”模型的“名称”属性,我该怎么做?我在文档中找不到任何解释这一点的内容。
    • 我试图在评论中回答,但我的评论太长了。请参阅上面的编辑答案。简而言之,您可以在回调函数中访问模型的属性...希望对您有所帮助!
    • 感谢您的帮助!我很感激!
    • 值得注意的是,在环回中,只有 PersistedModel 带有内置方法...如果您想创建一个具有 REST 数据源的模型,那么您确实需要创建自定义处理请求的远程方法
    【解决方案2】:

    我终于发现了我的问题。对象属性必须在调用 CRUD 操作的函数的回调中加载。以下语法对我有用:

    module.exports = function (TestModel) {
        TestModel.testRemoteMethod = function (id, name, cb) {
            TestModel.findOne({where: {id: id}}, function(err, modelInstance) {
                //modelInstance has properties here and can be returned to
                //the API call using the callback, for example:
                cb(null, {"name": modelInstance.name});
            }
        }
        TestModel.remoteMethod('testRemoteMethod',
            //..rest of config
    

    【讨论】:

    • 很高兴你把它整理出来。抱歉我没能早点回答。
    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多