gpt4 book ai didi

node.js - 发送后表达响应正文

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:47 25 4
gpt4 key购买 nike

我正在使用 express ,我想在发送后审核回复

var app = express();
app.use(audit.auditRequest); // working fine
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(expressValidator({
customValidators: validations.customValidators,
customSanitizers: sanitizers.customSanitizers
}));
app.use(auth.authenticate);
app.use('/myPath', myPathHandler);
app.use(errorHandler.handleErrors);
**app.use(audit.auditResponse);**

例如,errorHandler 看起来像这样:

...
res.status(500).send({ message : "abc", code: 5010, description : "def" });
next(); // call audit middleware

然后审核中间件如下所示:

...      
auditModule.auditResponse = function auditResponse(req, res, next) {
auditLogger.info('Response', res.body);
// but res.body is undefined
};
...

知道为什么吗?

最佳答案

据我所知,响应正文并不像响应属性那样容易获得。

所以:res.body 不起作用。所以,我有一个解决方法。我们可以从响应写入中捕获数据,将其累积并手动将其添加到 res.body 中。将其作为中间件注入(inject),这样它就可以工作了。请注意,它应该在任何 .compress() 之前注入(inject)。

作为中间件注入(inject)(这是在 ES6 中,将直接在 Node.js 中工作,但如果您愿意,我会将答案更改为 ES5):

server.use((req, res, next) => {
const original_write = res.write,
original_end = res.end,
chunks = [];
res.write = function(chunk) {
chunks.push(chunk);
original_write.apply(res, arguments);
};
res.end = function(chunk) {
if (chunk)
chunks.push(chunk);
res.body = Buffer.concat(chunks).toString('utf8');
original_end.apply(res, arguments);
};
next();
});

现在,您可以在发送响应后愉快地使用 res.body 。 :D

注意:res.body 将是一个 utf8 编码的字符串。如果它是一个对象,则将其解析回 json。

关于node.js - 发送后表达响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38293368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com