2015-03-31 14 views
5

Tôi gặp sự cố Tôi không thể tìm thấy câu trả lời trong tài liệu của Loopback.Thêm bộ lọc vào móc từ xa trước của OneRemote

Giả sử tôi có mô hình Company và kiểu Employee. Có mối quan hệ 1Xn giữa CompanyEmployees của nó. Khi /api/Employees được gọi, máy chủ trả về tất cả các nhân viên.

Tôi chỉ muốn trả lại danh sách nhân viên ở cùng một công ty với người dùng yêu cầu danh sách.

Đối với điều này, tôi tạo ra một cái móc từ xa

 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(); 
     }); 

    }); 

Tôi nghĩ điều này sẽ làm việc mỗi thời gian, nhưng appearantly nó chỉ hoạt động khi tìm thấy đã có một số bộ lọc truy vấn như bao gồm - mặc dù console.log in một đúng đối tượng context.req.query.

Tôi đang thiếu gì? Mọi sự trợ giúp sẽ rất được trân trọng!

+0

Bạn có nói rằng hàm hook 'beforeRemote()' không được gọi khi không có bộ lọc nào được chuyển tới 'find()' hay mã của bạn không hoạt động khi không có bộ lọc nào được cung cấp? – jakerella

+0

Vấn đề là context.req.query.filter bị bỏ qua khi nó không được thiết lập từ yêu cầu của máy khách. Đề nghị của Alex làm việc mặc dù, cảm ơn tất cả các bạn đã giúp đỡ của bạn. –

Trả lời

9

context.args.filter dường như hoạt động cho mục đích này. Là một lưu ý phụ, thay vì thay thế where, bạn có thể muốn hợp nhất nó với một cái gì đó được cung cấp bởi khách hàng. Để biết ý tưởng triển khai, bạn có thể tham khảo: https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/utils.js#L56-L122

+0

Tuyệt vời, cảm ơn, nó hoạt động! –

+0

Tôi muốn làm điều này chính xác, tuy nhiên tôi nhận được một "TypeError: Không thể gán cho chỉ đọc tài sản ....". Bạn có bao giờ thấy điều này trong khi làm việc về vấn đề này không? – Jonathan

Các vấn đề liên quan