node express:将每条http消息打印到控制台

时间:2017-10-10 20:37:44

标签: node.js express

我遇到了使用快递写的节点应用程序的问题。为了帮助调试问题,我想打印出应用程序发送或接收的每条HTTP消息到控制台。我试过这个:

app.use('/', (req, res, next) => {
  console.log(req)
  console.log(res)
  next()
})

但问题是此处打印的对象resreq不包含我需要的信息。它们分别是HTTP.ServerResponseHTTP.IncomingMessage对象。 body中没有res元素(即我的应用发送的响应),我无法弄清楚如何获取它。我也试过这个:

app.use('/', (req, res, next) => {
  var data = ''
  res.on('data', chunk => { data+=chunk })
  res.on('end', () => {
    console.log(data)
    next()
  })
})

但是这会导致服务器挂起。 next()永远不会被召唤。

我怎样才能做我想做的事?

1 个答案:

答案 0 :(得分:1)

定义use处理程序时,绝对必须在继续处理该请求之前调用next。在这里你已经破坏了自己:在请求完成之前你永远不会打电话,但是由于你从来没有打过next,所以永远不会发生这种情况。

你想要的可能就是:

app.use('/', (req, res, next) => {
  var data = ''
  res.on('data', chunk => { data+=chunk })
  res.on('end', () => {
    console.log(data)
  })

  next()
})

不打电话next是你说的方式"等等,我还没有完成!"但你想要的是设置那些钩子然后继续处理。