2015-03-31 69 views
5

我遇到问题我无法在Loopback的文档中找到答案。在beforeRemote远程挂钩内添加过滤器

假设我有一个型号Company和一个型号EmployeeCompany与其Employees之间有1Xn的关系。当调用/api/Employees时,服务器返回所有员工。

我只想返回与请求列表的用户处于同一公司的员工列表。

对于这一点,我创建了一个远程钩

 Employee.beforeRemote('find', function(context, modelInstance, next) { 
     var reject = function() { 
      process.nextTick(function() { 
       next(null, false); 
      }); 
     }; 

     // do not allow anonymous users 
     var userId = context.req.accessToken.userId; 
     if (!userId) { 
      return reject(); 
     } 

     //I get the details of the user who sent the request 
     //to learn which company does he belong to 
     Employee.findById(userId, function(err, user) { 
      if(!context.req.query.filter) context.req.query.filter={}; 
      context.req.query.filter.where = {brandId:user.companyId}; 
      console.log(context.req.query); 
      next(); 
     }); 

    }); 

我想这应该每工作时间,但appearantly它只能当发现已经有一些查询过滤器等包括 - 虽然执行console.log打印正确的context.req.query对象。

我错过了什么?任何帮助将不胜感激!

+0

你是说,当没有过滤器传递给find()时没有调用'beforeRemote()'钩子函数,或者你的代码明确地不工作没有提供过滤器? – jakerella 2015-03-31 17:30:51

+0

问题在于context.req.query.filter在未从客户端请求中设置时被忽略。亚历克斯的建议虽然工作,谢谢大家的帮助。 – 2015-04-01 07:04:56

回答

9

context.args.filter似乎适用于此目的。 作为一个方面说明,您可能不想替换where,而是将其与客户端提供的某些东西进行合并。对于实现的想法,你可以参考:https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/utils.js#L56-L122

+0

真棒,谢谢,它的作品! – 2015-04-01 07:03:38

+0

我想做同样的事情,但是我得到一个“TypeError:不能分配给只读属性....”。在处理这个问题时你有没有看到这个? – Jonathan 2016-06-02 13:11:01