Sails 應用程式捆綁了數個預先設定的回應,可以從動作程式碼中呼叫。這些預設回應可以處理諸如「找不到資源」(notFound
回應)和「內部伺服器錯誤」(serverError
回應)等情況。如果您的應用程式需要修改預設回應的運作方式,或完全建立新的回應,您可以透過將檔案新增至 api/responses
資料夾來完成。
注意:新的 Sails 應用程式預設不會產生
api/responses
,因此如果您想要新增/自訂回應,則必須自行新增。
作為一個快速範例,請考慮以下動作
getProfile: function(req, res) {
// Look up the currently logged-in user's record from the database.
User.findOne({ id: req.session.userId }).exec(function(err, user) {
if (err) {
res.status(500);
return res.view('500', {data: err});
}
return res.json(user);
});
}
此程式碼透過傳送 500 錯誤狀態並將錯誤資料傳送至視圖以顯示來處理資料庫錯誤。但是,此程式碼有幾個缺點,主要是
現在,考慮這個替換方案
getProfile: function(req, res) {
// Look up the currently logged-in user's record from the database.
User.findOne({ id: req.session.userId }).exec(function(err, user) {
if (err) { return res.serverError(err); }
return res.json(user);
});
}
這種方法有很多優點
任何儲存在 api/responses/
資料夾中的 .js
檔案都可以透過呼叫 res.thatFileName()
來執行。例如,api/responses/insufficientFunds.js
可以透過呼叫 res.insufficientFunds()
來執行。
req
、res
和 sails
請求和回應物件在自訂回應中以 this.req
和 this.res
的形式提供。這允許實際的回應函式接受任意參數。例如
return res.insufficientFunds(err, { happenedDuring: 'signup' });
而自訂回應的實作可能看起來像這樣
module.exports = function insufficientFunds(err, extraInfo){
var req = this.req;
var res = this.res;
var sails = req._sails;
var newError = new Error('Insufficient funds');
newError.raw = err;
_.extend(newError, extraInfo);
sails.log.verbose('Sent "Insufficient funds" response.');
return res.badRequest(newError);
}
所有 Sails 應用程式都有幾個預先設定的回應,例如 res.serverError()
和 res.notFound()
,即使它們在 api/responses/
中沒有對應的檔案,也可以使用。
任何預設回應都可以透過在您的應用程式的 api/responses/
中新增同名檔案(例如 api/responses/serverError.js
)來覆寫。
您可以使用 Sails 命令列工具 作為執行此操作的捷徑。
例如
sails generate response serverError