2015-03-31 6 views
5

मुझे कोई समस्या है मुझे लूपबैक के दस्तावेज़ों में कोई जवाब नहीं मिल रहा है।पहले रिमोट रिमोट हुक के अंदर एक फ़िल्टर जोड़ना

कहें कि मेरे पास मॉडल Company और एक मॉडल Employee है। Company और इसके Employees के बीच 1 एक्सएन संबंध है। जब /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

क्या आप कह रहे हैं कि 'findRemote()' हुक फ़ंक्शन को नहीं कहा जा रहा है जब 'find() 'पर कोई फ़िल्टर नहीं है, या आपका कोड विशेष रूप से काम नहीं कर रहा है कोई फ़िल्टर प्रदान नहीं किया जाता है? – jakerella

+0

समस्या यह थी कि context.req.query.filter को क्लाइंट अनुरोध से सेट नहीं किया गया था जब अनदेखा किया जाता है। हालांकि, एलेक्स के सुझाव ने काम किया, आपकी मदद के लिए सभी को धन्यवाद। –

उत्तर

9

context.args.filter इस उद्देश्य के लिए काम करता प्रतीत होता है। where को बदलने की जगह, एक साइड नोट के रूप में, आप इसे क्लाइंट द्वारा प्रदान की गई किसी चीज़ के साथ मर्ज करना चाहेंगे। कार्यान्वयन विचार के लिए आप इसका उल्लेख कर सकते हैं: https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/utils.js#L56-L122

+0

बहुत बढ़िया, धन्यवाद, यह काम करता है! –

+0

मैं यह वही काम करना चाहता हूं, हालांकि मुझे "टाइप एरर: केवल संपत्ति पढ़ने के लिए असाइन नहीं किया जा सकता है ...."। क्या आपने कभी इस मुद्दे पर काम करते हुए यह देखा था? – Jonathan

संबंधित मुद्दे