Node.js 从同一节点应用程序检索res.json()数据
我目前正在使用Node.js 从同一节点应用程序检索res.json()数据,node.js,express,response-time,Node.js,Express,Response Time,我目前正在使用node.js和express.js开发API服务器。我想知道关于每个api响应需要多长时间的信息。为此,我习惯于花时间 app.use(responseTime(function(req, res, time) { var log = { "date" : new Date(), "os" : req.headers['user-agent'], "requestUrl" : req.originalUrl,
node.js
和express.js
开发API服务器。我想知道关于每个api响应需要多长时间的信息。为此,我习惯于花时间
app.use(responseTime(function(req, res, time) {
var log = {
"date" : new Date(),
"os" : req.headers['user-agent'],
"requestUrl" : req.originalUrl,
"ipAddress" : req.ip,
"requestMethod" : req.method,
"statusCode" : res.statusCode,
"statusMessage" : "",
"timeTaken" : Math.floor(time),
"data" : JSON.stringify(req.body)
};
// save log data
}));
对于每个API响应,我都使用json方法处理错误,即res.status(400).json({message:'Something'})
如何在
responseTime
函数中检索json错误消息?不幸的是,我认为这不可能在这个中间件中实现。响应时间
中间件在发送头()之前停止计时,我相信这是在响应对象上设置主体之前。我甚至不确定身体是否被设置在响应对象上
您可以尝试使用类似这样的东西,并结合“响应时间”不幸的是,我认为这个中间件不可能做到这一点。
响应时间
中间件在发送头()之前停止计时,我相信这是在响应对象上设置主体之前。我甚至不确定身体是否被设置在响应对象上
您可以尝试使用类似的东西,并结合使用“响应时间”无法这样访问的原因是,响应主体从未设置在响应对象上。而是直接流式传输到客户端。因此,您必须手动将响应主体收集到响应对象中 最简单的解决方案是始终将主体(本例中为错误json)传递到响应对象内的自定义字段中。例如,在路线中,添加如下内容:
get('/myErrorRoute', function(req, res, next) {
var errJson = {message: 'Something'};
res.myCustomField = errJson;
res.status(400).json(errJson);
});
app.use(responseTime(function(req, res, time) {
var log = {
"date" : new Date(),
"os" : req.headers['user-agent'],
"requestUrl" : req.originalUrl,
"ipAddress" : req.ip,
"requestMethod" : req.method,
"statusCode" : res.statusCode,
"statusMessage" : "",
"timeTaken" : Math.floor(time),
"data" : JSON.stringify(req.body)
};
// acces your custom field
console.log(res.myCustomField);
}));
然后在中间件中访问它,如下所示:
get('/myErrorRoute', function(req, res, next) {
var errJson = {message: 'Something'};
res.myCustomField = errJson;
res.status(400).json(errJson);
});
app.use(responseTime(function(req, res, time) {
var log = {
"date" : new Date(),
"os" : req.headers['user-agent'],
"requestUrl" : req.originalUrl,
"ipAddress" : req.ip,
"requestMethod" : req.method,
"statusCode" : res.statusCode,
"statusMessage" : "",
"timeTaken" : Math.floor(time),
"data" : JSON.stringify(req.body)
};
// acces your custom field
console.log(res.myCustomField);
}));
或者,如果您有胆量的话,可以通过使用json()方法进行修补。
您不能这样访问的原因是,响应主体从未在响应对象上设置。而是直接流式传输到客户端。因此,您必须手动将响应主体收集到响应对象中 最简单的解决方案是始终将主体(本例中为错误json)传递到响应对象内的自定义字段中。例如,在路线中,添加如下内容:
get('/myErrorRoute', function(req, res, next) {
var errJson = {message: 'Something'};
res.myCustomField = errJson;
res.status(400).json(errJson);
});
app.use(responseTime(function(req, res, time) {
var log = {
"date" : new Date(),
"os" : req.headers['user-agent'],
"requestUrl" : req.originalUrl,
"ipAddress" : req.ip,
"requestMethod" : req.method,
"statusCode" : res.statusCode,
"statusMessage" : "",
"timeTaken" : Math.floor(time),
"data" : JSON.stringify(req.body)
};
// acces your custom field
console.log(res.myCustomField);
}));
然后在中间件中访问它,如下所示:
get('/myErrorRoute', function(req, res, next) {
var errJson = {message: 'Something'};
res.myCustomField = errJson;
res.status(400).json(errJson);
});
app.use(responseTime(function(req, res, time) {
var log = {
"date" : new Date(),
"os" : req.headers['user-agent'],
"requestUrl" : req.originalUrl,
"ipAddress" : req.ip,
"requestMethod" : req.method,
"statusCode" : res.statusCode,
"statusMessage" : "",
"timeTaken" : Math.floor(time),
"data" : JSON.stringify(req.body)
};
// acces your custom field
console.log(res.myCustomField);
}));
或者,如果您有胆量的话,可以通过使用json()方法进行修补。