2016-09-21 131 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(身体)。它会发送“身体”作为响应身体。确保身体应该是对象。