我一直在远程钩子中使用包含过滤器,就像登录钩子一样,它们就像魅力一样:
customer.afterRemote('login', function(ctx, modelInstance, next) {
if (ctx.result) {
customer.find({include: ['someRelationA', 'someRelationB', 'someRelationC'], where: {id: ctx.result.userId}}, function(err, obj) {
next();
});
}
else{
next();
}
});
但是当我在远程方法中使用包含过滤器时,如下所示:
customer.getProfile = function (userId, cb) {
customer.find({include: ['someRelationA', 'someRelationB', 'someRelationC'], where: {id: userId}}, function(err, obj) {
// commonHelper.setFinalObject(ctx, obj);
cb(err, obj);
});
};
他们不会很好,收到以下错误:
{
"error": {
"name": "MongoError",
"status": 500,
"message": "not authorized for query on mytestdb.someRelationA",
"$err": "not authorized for query on mytestdb.someRelationA",
"code": 13,
"stack": "MongoError: not authorized for query on mytestdb.someRelationA ..."
}
}
My Remote hook声明如下:
customer.getProfile = function (userId, cb) {
customer.find({include: ['someRelationA', 'someRelationB', 'someRelationC'], where: {id: userId}}, function(err, obj) {
cb(err, obj);
});
};
customer.remoteMethod(
'getProfile',
{
accepts: {arg: 'id', type: 'string', required: true},
returns: {type: 'object', root: true},
http: {path: '/:id/getprofile', verb: 'get'}
}
);
注意:如果我删除了包含过滤器并且仅使用customer.findById,则会成功返回用户对象,但由于某些我无法使用的ACL问题,包括过滤器。任何帮助都非常感谢。
更新:刷新请求两次或三次返回预期的事情,然后它成功运行,我猜它是第一次需要的缓存和查询延迟,在建立关系后,记录成功返回。