簡體   English   中英

Sailsjs:基於請求參數設置響應方法

[英]Sailsjs: Setting response method based on request parameter

所以我一直在使用Sailsjs進行SPA項目。 問題是:

當第一頁加載時,我在控制器中使用res.viewres.render 但是,對於后續請求,我不想使用res.viewres.render ,而是要使用res.json

現在,我使用以下方法:

return req.param('json') ? res.json(myObj) : res.view('layout', myObj);

這工作,但我一直在尋找在我的控制器本身會知道一個更通用的抽象方法(的基礎上req.param('json')是否使用) res.viewres.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM