Node.js/ Express - 简单的中间件,用于输出响应的前几个字符



对于日志记录/调试,我想在发送到浏览器之前输出响应的前一百个字符左右。我可以用中间件和响应对象做一些简单的事情来做到这一点吗?

理想情况下,它是这样的:

app.use(function(req, res, next) {
    console.log('Response snippet: '+((res.body || '').substr(0,100)));
    next();
});

除了响应没有正文,我无法完全弄清楚要发回的当前正文传递到哪里。

更新:

彼得的回答奏效了,我想我会把我的中间件代码放在这里,为未来的观众节省点击:

App.use(function(req, res, next) {
    var end = res.end;
    res.end = function(chunk, encoding){
        res.end = end;
        if (chunk) {
            console.log(chunk);
        }
        res.end(chunk, encoding);
    };
    next();
});

因此,您需要挂钩到响应输出 API,这在中间件中并不像挂接到请求处理中那么简单。最好的例子是connect的内置记录器中间件。它基本上对req.end方法进行猴子修补并将该数据转发到其流上,然后继续调用真正的req.end函数。您需要遵循此模式,该模式应该适用于非流式处理响应。

该模式最终可能只为您提供最后一个数据块(对于流响应的情况)。如果是这样,您只需对猴子补丁res.write而不是res.end,您将可以访问第一个块。一旦你记录了第一个块,只需取消猴子补丁res.write

最新更新