LoopBack远程方法和访问模型数据

12

我已经花费数小时时间在这个问题上,但完全迷失了方向,因为loopback的文档没有提供有用的帮助。

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

2个回答

9
通常情况下,您可以通过所有模型获得的内置方法(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的示例。它定义了一个远程方法,该方法接受一个数字参数并将具有该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
Rand

谢谢您的回答,也许我走了一条错误的路,但我认为我的问题甚至比您想象的更基本。模型的属性存储在哪里?如果我想从“common/models/Person.js”中定义的远程方法内部console.log一个“Person”模型的“Name”属性,我该怎么做?我在文档中找不到任何解释这个的内容。 - Michael.Lumley
我曾尝试在评论中回答,但我的评论太长了。请参见上面编辑后的答案。简而言之,您可以在回调函数内访问模型的属性...希望能有所帮助! - RandM
谢谢你的帮助!我很感激! - Michael.Lumley
值得注意的是,在LoopBack中,只有PersistedModel带有内置方法...如果您想创建一个具有REST数据源的模型,则需要创建自定义远程方法来处理请求。 - br3w5

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

很高兴你把它解决了。抱歉我之前无法及时回答。 - RandM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接