我遇到了使用快递写的节点应用程序的问题。为了帮助调试问题,我想打印出应用程序发送或接收的每条HTTP消息到控制台。我试过这个:
app.use('/', (req, res, next) => {
console.log(req)
console.log(res)
next()
})
但问题是此处打印的对象res
和req
不包含我需要的信息。它们分别是HTTP.ServerResponse
和HTTP.IncomingMessage
对象。 body
中没有res
元素(即我的应用发送的响应),我无法弄清楚如何获取它。我也试过这个:
app.use('/', (req, res, next) => {
var data = ''
res.on('data', chunk => { data+=chunk })
res.on('end', () => {
console.log(data)
next()
})
})
但是这会导致服务器挂起。 next()
永远不会被召唤。
我怎样才能做我想做的事?
答案 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
是你说的方式"等等,我还没有完成!"但你想要的是设置那些钩子然后继续处理。