小编gib*_*son的帖子

node.js表达请求ID

我正在尝试为记录目的创建某种请求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?

node.js express

11
推荐指数
1
解决办法
7306
查看次数

S3在上传时设置文件名

我正在使用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)

谢谢!

amazon-s3 node.js

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

node.js ×2

amazon-s3 ×1

express ×1