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
相关产品推荐
相关产品推荐

