2014-11-14 15 views
5

Sto tentando di modificare il codice di stato http di create.Come modificare i codici di stato http in Strongloop Loopback

POST /api/users 
{ 
    "lastname": "wqe", 
    "firstname": "qwe", 
} 

restituisce 200 invece di 201

posso fare qualcosa di simile per gli errori:

var err = new Error(); 
err.statusCode = 406; 
return callback(err, info); 

Ma non riesco a trovare il modo di cambiare il codice di stato per creare.

ho trovato il metodo create:

MySQL.prototype.create = function (model, data, callback) { 
    var fields = this.toFields(model, data); 
    var sql = 'INSERT INTO ' + this.tableEscaped(model); 
    if (fields) { 
    sql += ' SET ' + fields; 
    } else { 
    sql += ' VALUES()'; 
    } 
    this.query(sql, function (err, info) { 
    callback(err, info && info.insertId); 
    }); 
}; 
+0

Ho cercato di capire anche questo. Una documentazione più completa sarebbe carina :( – Jake

risposta

8

nella chiamata a remoteMethod è possibile aggiungere una funzione per la risposta diretta. Ciò si ottiene con l'opzione rest.after:

function responseStatus(status) { 
    return function(context, callback) { 
    var result = context.result; 
    if(testResult(result)) { // testResult is some method for checking that you have the correct return data 
     context.res.statusCode = status; 
    } 
    return callback(); 
    } 
} 

MyModel.remoteMethod('create', { 
    description: 'Create a new object and persist it into the data source', 
    accepts: {arg: 'data', type: 'object', description: 'Model instance data', http: {source: 'body'}}, 
    returns: {arg: 'data', type: mname, root: true}, 
    http: {verb: 'post', path: '/'}, 
    rest: {after: responseStatus(201) } 
}); 

Nota: Sembra che strongloop costringerà un "No Contenuto" 204 se il valore è context.result Falsey. Per ovviare a ciò, semplicemente restituisco un oggetto vuoto {} con il mio codice di stato desiderato.

+0

Grazie! Funziona! Ma ora uso http://sailsjs.org/#/, molto più flessibile. – enguerran

1

È possibile specificare un codice di risposta positiva predefinito per un metodo remoto nel parametro http.

MyModel.remoteMethod(
    'create', 
    { 
    http: {path: '/', verb: 'post', status: 201}, 
    ... 
    } 
);