S3有必要创建一个新的客户端对象为每个请求在node . js ?



是否有必要为Node.js中的每个请求创建一个新的S3客户端对象?

const aws = require('aws-sdk');
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
const s3 = new aws.S3();
const params = {
Bucket: "examplebucket", 
Key: "HappyFace.jpg"
};
s3.getObject(params, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else res.send(data);
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})

这只是一个示例代码,但const s3 = new aws.S3();的位置对我来说至关重要。假设服务并行处理数千个请求,然后生成数千个S3对象。目前,该服务可以毫无问题地处理它。我的问题是,有必要吗?如果我只在路由定义上面创建了一个S3对象,当代码更改为

时,并行请求是否会相互影响?
...
const s3 = new aws.S3();
app.get('/', (req, res) => {
const params = {
Bucket: "examplebucket", 
Key: "HappyFace.jpg"
};
s3.getObject(params, (err, data) => {
if (err) console.log(err, err.stack); // an error occurred
else res.send(data);
});
...

当你这样做的时候:

const s3 = new aws.S3();

你只是在实例化AWS SDK提供的S3类,因此唯一可能出现问题的是,如果你需要实例的不同初始配置,例如区域,版本…

也就是说,从您提供的代码来看,在端点之外实例化S3类是可以的,而且这可能也是一种很好的实践。

绝对不是。这里的s3对象是您将从AWS sdk中使用的api子集的管理器实例,而不是s3对象表示。

除非你正在做一些非常具体的事情(这在问题中并不精确,所以我认为情况并非如此),否则你最好将其设置在app.get部分上方。

如果s3 api的sdk配置对于每个请求必须不同(例如:如果您需要为每个请求使用不同的aws凭据或为每个请求将对象存储在不同的区域),您只会采用您提到的第一种方式

相关内容

  • 没有找到相关文章

最新更新