2016-09-21 132 views
2

我想通過添加以下代碼作爲中間件的body屬性添加到Express.js'響應對象,這都會被調用的send method is called時間, 我這樣做,Express.js-添加響應主體

但由於某種原因,當我呼叫res.send這個函數被調用兩次(當body是對象時,第二次是同一個對象但是是一個字符串) 1.爲什麼它被調用兩次? 2.爲什麼什麼時候它被轉換爲字符串?

applicationsRouter.use(function (req, res, next) { 
     var send = res.send; 
     res.send = function (body) { 
      res.body = body 
      send.call(this, body); 
     }; 
     next(); 
    }); 

回答

4

您可能正在使用這樣的事:

res.send({ foo : 'bar' }); 

換句話說,你傳遞一個對象res.send

這將做到以下幾點:

  • 呼叫res.send與對象作爲參數
  • res.sendchecks the argument type,並認爲它是一個對象,它傳遞給res.json
  • res.json對象轉換成JSON字符串,並再次調用res.send,但是這次以JSON字符串作爲參數
3

你必須使用res.json(身體)。它會發送「身體」作爲響應身體。確保身體應該是對象。