如何覆盖默认的环回模型API路径

时间:2018-09-27 07:35:21

标签: node.js express swagger loopbackjs strongloop

我们如何覆盖默认的环回REST API模型端点?例如,当调用以下GET API时,我想调用名为 list 的自定义模型方法。

enter image description here

我指的是文档https://loopback.io/doc/en/lb2/Exposing-models-over-REST.html

1。来自环回浏览器的API端点:http://localhost:3000/api/Assets

2.Model方法定义:

Asset.list = function(cb) {
    console.log("called");
}

Asset.remoteMethod('list', {
    http: {path: '/'},
    returns: {type: 'Object', root: true}
});

2 个答案:

答案 0 :(得分:0)

您的console.log("called");应该只出现在您的终端中,而不是在网络浏览器中显示-这也许就是为什么您现在看不到它的原因。

如果您想在Web浏览器上看到某些内容,则必须为回调返回一个值,例如:

module.exports = function (Asset) {

    Asset.list = function(cb) {
        console.log("called");
        cb(false, {'called': true}); // cb(error, returned value(s));
    }

    Asset.remoteMethod('list', {
        http: {verb: 'get'},
        returns: {type: 'Object', root: true}
    });
}

此文件应位于您的 common / model / asset.js


在您的 server / model-config.json 中,不要忘记引用您的模型:

     ...
     "Asset": {
        "dataSource": "yourdatasource", //change this by your datasource name
        "public": true
     }
     ...

答案 1 :(得分:0)

如果您不想使用默认路径(默认方法未使用),则应将新的远程方法添加到JSON模型配置中,并在JS模型文件中定义方法:

"methods": {
  "myCustomMethod": {
    "accepts": [
      {
        "arg": "req",
        "type": "object",
        "http": {
          "source": "req"
        }
      }
    ],
    "returns": [
      {
        "type": "Array",
        "root": true
      }
    ],
    "http": {
      "verb": "GET",
      "path": "/myCustomPath"
    }
  }
}

Candidate.myCustomMethod = (req) => {//method code}

如果您要覆盖默认的环回路径(自动生成的方法),则还应该禁用默认方法。

Candidate.disableRemoteMethodByName('find');

因此,现在您可以将JSON配置“ / myCustomPath”更改为“ /”,并且您的远程方法将引用您的函数,而不是默认值。