我相信您正在寻找的是一个逻辑流 ID,它应该是唯一的,并且在您的后端启动的每个新请求时都会生成。如果这个假设是正确的,我通常会在我的 express 路由器上创建一个中间件来生成一个新的随机流 id(带有randomstring)。为了确保这个流 id 是唯一的,我添加了时间戳。为了将此流 id 传递给下一个中间件,我们应该将其存储在 res.locals 下(此处为文档)您的中间件可能如下所示:
//middleware flow.js
var random = require('randomstring');
var generate = function(){
var dt = new Date();
return random.generate() + dt.toISOString();
}
module.exports.createID = function(req, res, next){
//store flowid in res - this hold state over the request life time
res.locals.flowid = generate();
next();
}
现在我们可以使用以下方法在应用程序中注入这个中间件:
var flowcontrol = require('flow.js');
var middleware = require('middleware.js');
app.use(flowcontrol.createID);
//route example
app.get('/api/awesomeresource', middlewares.first, middlewares.second);
使用这种方法,您将能够在每个中间件上记录相同的流 id,例如:
//middleware.js
module.exports.first = function(req, res, next){
console.log(res.locals.flowid + " - First i did this...");
//your logic here
next();
}
module.exports.second = function(req, res, next){
console.log(res.locals.flowid + " - Second i did this...");
//your logic here before the response
res.sendStatus(200);
}
结果
GET /api/awesomeresource HTTP/1.1
将是以下控制台日志:
> R90A56nEmZWYK73NOEVbWv2RS6DolO4D2017-12-07T10:29:39.291Z - First i did
> this...
> R90A56nEmZWYK73NOEVbWv2RS6DolO4D2017-12-07T10:29:39.291Z -
> Second i did this...
这意味着您可以通过此标记跟踪某种日志文件,并在需要时调试您的后端逻辑。
干杯