2014-11-14 72 views
5

我試圖修改創建的http狀態代碼。如何更改Strongloop Loopback中的http狀態代碼

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

返回200,而不是201

我可以爲錯誤,做這樣的事情:

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

但我無法找到如何更改狀態代碼創建。

我發現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

我一直在試圖弄清楚這一點。更全面的文檔將是不錯的:( – Jake 2014-11-15 03:17:37

回答

8

在您的來電remoteMethod可以直接添加一個函數來響應。這是通過與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) } 
}); 

注:看來,strongloop將迫使204「無內容」如果context.result值falsey。爲了解決這個問題,我只需傳回一個空的對象{}與我想要的狀態代碼。

+0

謝謝!它的工作原理!但現在我使用http://sailsjs.org/#/,更靈活。 – enguerran 2014-11-18 10:07:48

1

您可以在http參數中指定遠程方法的默認成功響應代碼。

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