无法在远程方法中使用包含过滤器

时间:2016-08-02 12:45:07

标签: mongodb mongodb-query loopbackjs strongloop

我一直在远程钩子中使用包含过滤器,就像登录钩子一样,它们就像魅力一样:

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问题,包括过滤器。任何帮助都非常感谢。

更新:刷新请求两次或三次返回预期的事情,然后它成功运行,我猜它是第一次需要的缓存和查询延迟,在建立关系后,记录成功返回。

0 个答案:

没有答案