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

时间:2012-12-03 19:33:43

标签: node.js express response middleware

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

理想情况如下:

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();
});

1 个答案:

答案 0 :(得分:5)

因此,您需要挂钩响应输出API,这在中间件中并不像挂钩请求处理那样简单。要查看的最佳示例是connect's built-in logger middleware。它基本上是对req.end方法进行修补并将数据转发到其流,然后继续调用真正的req.end函数。您需要遵循此模式,这应该适用于非流式响应。

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