[英]Sailsjs: Setting response method based on request parameter
所以我一直在使用Sailsjs
進行SPA
項目。 問題是:
當第一頁加載時,我在控制器中使用res.view
或res.render
。 但是,對於后續請求,我不想使用res.view
或res.render
,而是要使用res.json
。
現在,我使用以下方法:
return req.param('json') ? res.json(myObj) : res.view('layout', myObj);
這工作,但我一直在尋找在我的控制器本身會知道一個更通用的抽象方法(的基礎上req.param('json')
是否使用) res.view
或res.json
沒有我不得不告訴它明確。
有什么幫助嗎?
這就是res.ok()
的作用。
在下面的控制器操作中, res.ok
將使用data
作為視圖本地res.ok
來顯示myAction.ejs ,或使用JSON作為data
響應,具體取決於請求的產生方式(即通過AJAX,套接字或常規瀏覽器請求):
module.exports = {
myAction: function(req, res) {
var data = {someKey: "someVal"};
return res.ok(data);
}
}
在內部, ok
響應使用req.wantsJSON
來確定要執行的操作。 它檢查標頭,查找xhr
對象,通常會盡最大努力猜測您的意圖。 req.wantsJSON
可用於所有請求( req.isSocket
也是req.isSocket
),因此您可以根據需要自己使用它們。
因此,經過一番修補后,我使用服務解決了此問題。
我寫了一個服務(在GlobalUtils.js中 ):
render: function (req, res, obj) {
if(req.param('json')) {
return res.json(obj);
}
else {
return res.view('layout', obj);
}
}
我在控制器中使用此服務,如下所示:
return GlobalUtils.render(req, res, myObj);
但是,仍然在尋找更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.