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

标签 node.js express response middleware

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

理想情况下是这样的:

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

除了响应没有正文,我不太清楚要发回的当前正文传递到哪里。

更新:

Peter 的回答奏效了,我想我应该将我的中间件代码放在这里以节省 future 查看者的点击次数:

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's built-in logger middleware .它基本上是猴子修补 req.end 方法并将该数据转发到它的流,然后继续调用真正的 req.end 函数。您需要遵循这种模式,它应该适用于非流式响应。

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

关于Node.Js/Express - 输出响应的前几个字符的简单中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690335/

相关文章:

android - 如何获得进度对话框,直到得到来自 android 服务的响应?

javascript - Promise.all 内含 Promise 链

javascript - 如何检查 JavaScript 中的特定异常?

node.js - 具有一个域名的多个node.js项目,每个项目都使用路径 '/'作为基本url。 Nginx 和 Express.js

node.js 表达 mongodb 保存消息?

android - JSONObject 响应为空

node.js - 如何使用 meteor 弹弓正确上传到Amazon S3?

javascript - 有没有更简单的方法在 JavaScript 中编写 Object.defineProperty

javascript - 在 NodeJS 中从服务器下载文件

angular 5 http post header 响应