2014-12-22 8 views
7

Vorrei sapere se esiste un modo per restituire uno specifico codice di stato HTTP da un metodo remoto.Come posso restituire codici di stato HTTP specifici da un metodo remoto in loopback?

Posso vedere che c'è una funzione di callback che possiamo passare un oggetto errore, ma come possiamo definire il codice di stato HTTP?

+1

cui la tecnologia si usa? – nburk

+0

se loopback è ciò di cui stiamo parlando, ecco una risposta dei suoi autori: https://groups.google.com/d/msg/loopbackjs/oK2g5A_h6vI/VNTD3_GDMQkJ – pulkitsinghal

risposta

-1

È possibile restituire qualsiasi codice di stato proprio come si farebbe in ExpressJS.

... 
res.status(400).send('Bad Request'); 
... 

Vedi http://expressjs.com/api.html

+0

Capisco che; ma come si ottiene un'istanza di risposta espressa? – ppoliani

+0

Dipende quale parte del ciclo di vita si è in. In alcuni luoghi, si ha accesso a ctx, nel qual caso si può fare 'ctx.req'. Ci sono anche importanti discussioni su getCurrentContext: https://github.com/strongloop/loopback/issues/1676. – superkhau

+2

Perché è downvoted? Funziona e non è api deprecato, http://expressjs.com/en/api.html#res.status – cpxPratik

2

Nella tua registrazione metodo remoto:

YourModel.remoteMethod('yourMethod', { 
    accepts: [ 
     {arg: 'res', type: 'object', http:{source: 'res'}} 
    ], 
    ... 
    returns: {root: true, type: 'string'}, 
    http: {path: '/:id/data', verb: 'get'} 
    }); 
15

Se si desidera utilizzare un codice di stato HTTP per notificare di un errore, è possibile passare un errore nei metodi remoti metodo di callback:

var error = new Error("New password and confirmation do not match"); 
 
error.status = 400; 
 
return cb(error);

È possibile trovare maggiori informazioni sull'oggetto errore qui: Error object

Se si desidera modificare solo lo stato della risposta HTTP senza l'utilizzo di un errore, è possibile utilizzare uno dei due metodi definiti da uno o #danielrvt #superkhau. Per ottenere il riferimento all'oggetto di richiesta menzionato da #superkhau, nella registrazione del metodo è possibile definire un argomento aggiuntivo che verrà passato al metodo remoto. Vedere HTTP mapping of input arguments

+1

Questo non restituisce comunque un'intera traccia di stack? Se si desidera restituire '{stato: 404, messaggio: 'Non trovato'}' c'è un approccio migliore? – user3162553

0

Se avete solo bisogno di modificare lo stato della risposta, basta fare:

ctx.res.status(400); 
return cb(null); 
Problemi correlati