2015-06-15 16 views
5

正如在標題中所述,我的sails應用GET請求到了特定的路由/控制器函數,在開發環境中返回帶有JSON的badRequest,但不是在產品中環境。爲什麼是這樣?Sails.js生產環境不會在badRequest上返回JSON響應,但是dev環境的確如

這裏是控制器功能:

index: function(req, res) { 

    async.auto({ 

     companies: function(cb) { 

      User.findOneById(req.session.user.id) 
       .populate('companies') 
       .exec(function(err, user) 
      { 

       if(err) { 
        var badRequestData = { error: err }; 
        return cb(badRequestData, null); 
       } else if(user.companies.length == 0) { 
        var badRequestData = { error: "This user has no associated companies." }; 
        return cb(badRequestData, null); 
       } 

       cb(null, user.companies) 

      }); 

     }, 

     validateForNullCompanies: ['companies', function(cb, results) { 

      var nullCompanies = _.where(results.companies, { stripeAccountId: null }); 

      if(nullCompanies.length > 0) { 
       var badRequestData = { error: "This user needs to authenticate stripe with their company." }; 
       return cb(badRequestData, null); 
      } else { 
       return cb(); 
      } 

     }] 

    }, function(err, results) { 

     if (err) { 
      return res.badRequest(err); 
     } 

     return res.ok(); 

    }); 

}, 

回答

6

就碰上這也

如果您在http://sailsjs.org/documentation/reference/response-res/res-bad-request看筆記它說

默認情況下,指定的錯誤( err)將被排除,如果應用程序在「生產」環境中運行(即process.env.NODE_ENV ==='production')。

而且考慮看看api/responses/badRequest.js我們可以看到下面的代碼:

// Only include errors in response if application environment 
// is not set to 'production'. In production, we shouldn't 
// send back any identifying information about errors. 
if (sails.config.environment === 'production') { 
    data = undefined; 
} 

所以,如果你對此有何評論了這一點,我相信你會得到你想要的結果生產。與此同時,這似乎是出於某種原因,所以可能發回的定製錯誤代碼爲res.send([statusCode], body),其中body是您的JSON,或者也可以創建一些客戶端處理,但對錯誤請求的描述性較差。

+0

有沒有原因不應該暴露不良的請求消息?暴露錯誤而不繞過這一點的最佳做法是什麼? –

+0

這是舊的,但一個有效的迴應,所以我會接受。 – morcutt

2

由finnergizer提供的答案類似,如果選中API /響應/ badRequest.js,實際的代碼應該是這樣的:

// Only include errors in response if application environment 
    // is not set to 'production'. In production, we shouldn't 
    // send back any identifying information about errors. 
    if (sails.config.environment === 'production' && sails.config.keepResponseErrors !== true) { 
    data = undefined; 
    } 

在評論中已經說過的原因。如果您仍然認爲您想要在生產環境中顯示錯誤消息,而不是將此行註釋掉,實際上您可以在config/env/production.js中添加項目'keepResponseErrors'並將其設置爲true。像這樣:

module.exports = { 
    keepResponseErrors: true 
}; 

這樣就不需要改變每個api/response js文件。

相關問題