我想拥有一个修改响应主体的中间件功能。
这是用于快速服务器。
类似:
function modify(req, res, next){
res.on('send', function(){
res.body = res.body + "modified"
});
next();
}
express.use(modify);
我不知道该听什么事件。任何帮助或文档将不胜感激。
您无需收听任何事件。只要做到
function modify(req, res, next){
res.body = res.body + "modified";
next();
}
然后在路由器use
之后输入use
。这样,在执行完所有路线后,您可以修改主体
我相信,一旦中间件处理了请求,OP实际上就想修改响应流。查看捆绑的Compress中间件实现,以获取有关如何完成此操作的示例。连接猴子修补程序ServerResponse
原型,以在调用header
时但未完成时发出writeHead
事件。
express-mung是为此设计的。除了事件,它还有更多的中间件。您的示例如下所示:
const mung = require('express-mung')
module.exports = mung.json(body => body.modifiedBy = 'me');
用Express 4覆盖响应的write方法似乎对我来说很有效。即使在流中,也可以修改响应的主体。
app.use(function (req, res, next) {
var write = res.write;
res.write = function (chunk) {
if (~res.getHeader('Content-Type').indexOf('text/html')) {
chunk instanceof Buffer && (chunk = chunk.toString());
chunk = chunk.replace(/(<\/body>)/, "<script>alert('hi')</script>\n\n$1");
res.setHeader('Content-Length', chunk.length);
}
write.apply(this, arguments);
};
next();
});
只需确保先注册此中间件,然后再配置其他任何可能正在修改响应的中间件。
似乎有一个用于执行此操作的模块称为connect-static-transform
,请签出:
connect-static-transform
连接中间件,允许在提供静态文件之前对其进行转换。
并且附带示例,例如https://github.com/KenPowers/connect-static-transform。