2015-03-31 16 views
5

Ho un problema Non riesco a trovare una risposta nei documenti di Loopback.Aggiunta di un filtro all'interno di un hook remoto beforeRemote

Dire che ho un modello Company e un modello Employee. Esiste una relazione 1Xn tra lo Company e il suo Employees. Quando viene chiamato /api/Employees, il server restituisce tutti i dipendenti.

Desidero solo restituire l'elenco di dipendenti che si trovano nella stessa società con l'utente che richiede l'elenco.

Per questo, ho creato un gancio a distanza

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

    }); 

Ho pensato che questo dovrebbe funzionare ogni volta, ma appearantly funziona solo quando ritrovamento ha già alcuni filtri di query come comprendere - anche se la stampa un console.log correggi oggetto context.req.query.

Cosa mi manca? Qualsiasi aiuto sarebbe molto apprezzato!

+0

Stai dicendo che la funzione di hook 'beforeRemote()' non viene chiamata quando non viene passato nessun filtro a 'find()', o che il tuo codice non funziona in modo specifico quando nessun filtro è fornito? – jakerella

+0

Il problema era che context.req.query.filter viene ignorato quando non è stato impostato dalla richiesta del client. Il suggerimento di Alex ha funzionato, grazie a tutti per il vostro aiuto. –

risposta

9

context.args.filter sembra funzionare per questo scopo. Come nota a margine, invece di sostituire where, potresti voler unirlo con qualcosa fornito dal client. Per l'idea di implementazione puoi fare riferimento a: https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/utils.js#L56-L122

+0

Fantastico, grazie, funziona! –

+0

Voglio fare esattamente la stessa cosa, comunque sto ricevendo un "TypeError: Can not assign to read only property ....". L'hai mai visto mentre lavoravi a questo problema? – Jonathan

Problemi correlati