我正在尝试为记录目的创建某种请求ID,这将通过请求流中的每个函数提供给我.我想记录请求流的每一步,并用Id说明哪个日志行是针对哪个请求的.
我查看了一些想法,并提出了两个主要建议:
第一个是创建一个中间件,它将在'req'对象中添加一个字段,如下所示(如此处所示):
var logIdIterator = 0;
app.all('*', function(req, res, next) {
req.log = {
id: ++logIdIterator
}
return next();
});
Run Code Online (Sandbox Code Playgroud)
第二个是使用continuation-local-storage
问题是:
对于第一种方法 - 这意味着我将不得不为流中的每个函数传递一个额外的参数,这对于使用无数API和流程的成熟应用程序来说并不是一个简单的解决方案.
第二个看起来很有希望但不幸的是它有一些国家迷失的问题(见这里例如).此外,当我们使用我们的redis库时,它发生了几次 - 这很糟糕,因为redis请求发生在我们的每个流上.
我想如果我找不到另一个解决方案,我将不得不使用第一种方法,只是我想避免将额外的参数传递给数千个现有函数.
我的问题是 - 您如何建议通过请求流维护请求ID?
我正在使用aws-sdk module将文件上传到 S3 。我使用 uuid 来表示每个文件。
我的问题是 - 如何设置真实文件名(不是 uuid),这样当我稍后从 S3 下载密钥时 - 将下载的文件将被命名为真实文件名?
我已阅读有关 Content-Disposition 标头的内容,但我认为这仅在下载请求中,我想在上传请求中执行此操作
当前代码是:
var s3obj = new AWS.S3({
params: {
Bucket: CONFIG.S3_BUCKET,
Key: key,
ContentType: type
}
});
s3obj.upload({
Body: fileData
}).on('httpUploadProgress', function(evt) {
logger.debug('storing on S3: %s', evt);
}).send(function(err, data) {
logger.debug('storing on S3: err: %s data: %s', err, data);
return callback();
});
Run Code Online (Sandbox Code Playgroud)
谢谢!