You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LoopBack自定义远程方法未执行,返回空数组问题求助

解决LoopBack自定义远程方法未执行,返回默认关联结果的问题

兄弟,我一眼就看出问题所在了——你定义的自定义远程方法路由和LoopBack自动生成的hasMany关系路由冲突了!

你在member.json里给Member模型加了projects的hasMany关系,LoopBack会自动为这个关系生成一系列远程方法,其中就包括GET /:id/projects这个路由。而且自动生成的方法优先级比你自定义的方法高,所以你调用这个接口时,实际触发的是LoopBack默认的关联查询,而不是你写的getProjectsForMember方法,这就是为什么你看不到HERE的日志,还返回了空数组(因为这个Member没有关联的Project)。

给你两个解决方案,选一个适合你的:

方案1:修改自定义方法的路由(最简单)

直接把自定义方法的http路径改成不冲突的,比如/:id/custom-projects:

// member.json 里的methods部分
"methods": {
  "getProjectsForMember": {
    "accepts": [{
      "arg": "id",
      "type": "number",
      "required": true,
      "http": {
        "source": "path"
      }
    }],
    "returns": [{
      "arg": "projects",
      "type": "Object",
      "root": true
    }],
    "http": [{
      "path": "/:id/custom-projects",
      "verb": "get"
    }]
  }
}

修改后重启服务,用新的路径http://localhost:3000/api/members/3e26u0aa62155715vcb52afa/custom-projects?access_token=xxx请求,就能看到预期的结果了。

方案2:禁用自动生成的关联方法(保留原路由)

如果你一定要用/:id/projects这个路径,那就在member.js里禁用LoopBack自动生成的__get__projects方法:

// member.js
module.exports = function(Member) {
  // 禁用hasMany关系自动生成的GET /:id/projects方法
  Member.disableRemoteMethodByName('__get__projects');

  Member.getProjectsForMember = function(id, callback) {
    console.error('HERE');
    return callback(null, {'test': '123'});
  };
};

这样你的自定义方法就会接管这个路由了,重启服务后用原路径请求就能正常触发你的代码。

记得修改后一定要重启LoopBack服务,不然变更不会生效哦!

内容的提问来源于stack exchange,提问作者petehallw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:42:48