Express.js-添加响应正文

我想为Express.js的响应对象添加一个body属性,每次调用send method is called它,我通过添加下面的代码作为中间件,

但由于某种原因,当我调用res.send这个函数被调用两次(当body是对象时,第二次是同一个对象,但是是一个string)。1.为什么被调用两次? 2.为什么什么时候被转换成string?

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

你可能正在使用这样的东西:

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

换句话说,你传递一个对象到res.send

这将做到以下几点:

  • 调用res.send作为参数的对象
  • res.send 检查参数types并且看到它是一个传递给res.json的对象
  • res.json将对象转换为JSONstring,并再次调用res.send ,但这次以JSONstring作为参数

你必须使用res.json(body)。 它会发送“身体”作为一个响应身体。确保身体应该是对象。