我有一个将用户ID映射到角色ID的角色映射模型,我需要在角色映射模型上使用远程方法来检索给定用户ID的角色映射ID。
这是remoteMethod的代码
'use strict';
module.exports = function(Rolemapping) {
Rolemapping.getRolesByUser = async function (id, cb) {
const roleMappings = await Rolemapping.find({ where: { principalId: id
} })
cb(null, roleMappings);
};
Rolemapping.remoteMethod("getRolesByUser", {
http: {
path: "/getRolesByUser",
verb: "get"
},
accepts: [
{ arg: "userId", type: "string", http: { source: "query" } }
],
returns: {
arg: "result",
type: "string"
},
description: "Cvs "
});
};
这是角色映射json文件:
{
"name": "roleMapping",
"base": "RoleMapping",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"role": {
"type": "belongsTo",
"model": "role",
"foreignKey": "roleId"
}
},
"acls": [],
"methods": {}
}
上述远程方法未在回送API资源管理器中显示。
答案 0 :(得分:1)
RoleMapping
是一个内置模型,其role-mapping.js
文件隐藏在node_modules/loopback
中,我已经对其进行了测试,它看起来不会为自己加载js文件来自common/models
。
启动脚本似乎是您唯一的选择。相同的代码,但是您的函数接收服务器对象。
server/boot/get-roles-by-user.js
module.exports = function(server) {
const Rolemapping = server.models.RoleMapping;
Rolemapping.getRolesByUser = async function (id) {
return JSON.stringify(await Rolemapping.find({ where: { principalId: id
} }))
};
Rolemapping.remoteMethod("getRolesByUser", {
http: {
path: "/getRolesByUser",
verb: "get"
},
accepts: [
{ arg: "userId", type: "string", http: { source: "query" } }
],
returns: {
arg: "result",
type: "string"
},
description: "Cvs "
});
}
我还从远程方法中删除了cb
参数,因为返回Promise
的方法不需要它,只需像返回其他任何函数一样返回值即可。