node.js - 将注入的依赖项传递给外部函数
问题描述
我有一个 NestJS 应用程序,其中我有一些关于使用 AWS S3 存储桶的逻辑。
我有一个模块,其中包含一个带有promiseWrapper
函数的服务,用于将回调转换为异步。
private s3PromiseWrapper(action: string, params: S3ParamGetDTO): Promise<string> {
console.log(params)
return new Promise((resolve, reject) => {
this.s3.getSignedUrl(
action,
{
Bucket: params.bucketName,
Key: params.key,
Expires: params.expirationTimeSeconds,
},
(err: any, url: string) => {
if (err) reject(err)
resolve(url)
}
)
})
没有另一个模块,需要使用相同的函数,所以不要重复我想创建一个全局函数作为util
函数的代码,但这需要我将实例作为参数传递给函数。
private s3PromiseWrapper(action: string, params: S3ParamGetDTO, s3Instance: S3): Promise<string> {
console.log(params)
return new Promise((resolve, reject) => {
s3Instance.getSignedUrl(
action,
{
Bucket: params.bucketName,
Key: params.key,
Expires: params.expirationTimeSeconds,
},
(err: any, url: string) => {
if (err) reject(err)
resolve(url)
}
)
})
就依赖注入而言,这是反模式吗?
解决方案
您可以按以下方式创建 s3 包装器
@Injectable({scope: transient})
export class S3Service {
private s3 = null //or just initiate the object;
init() {
this.s3 = new S3();
}
s3PromiseWrapper(action: string, params: S3ParamGetDTO): Promise<string> {
console.log(params)
return new Promise((resolve, reject) => {
this.s3.getSignedUrl(
action,
{
Bucket: params.bucketName,
Key: params.key,
Expires: params.expirationTimeSeconds,
},
(err: any, url: string) => {
if (err) reject(err)
resolve(url)
}
)
})
}
在任何其他服务中注入相同的服务
MYService() {
constructor(
private s3: S3Service
) {
this.s3.init()
}
mymethod() {
this.s3.s3PromiseWrapper()
}
}
但是,请为其他需要的东西编写一个包装器。
javascript aws-sdk 已经提供了所有方法的承诺版本。可以通过附加.promise()
到方法来访问。
例如
this.s3.getSignedUrl(params).promise()
推荐阅读
- python - 如何突出显示matplotlib中多条曲线中的最低曲线(包络线)
- c# - 为什么我在尝试创建 ASP.NET MVC 项目时创建标识时出现脚手架项目错误
- python - Selenium 在尝试放置文本时返回“消息:元素不可交互”
- typescript - 打字稿记录
其中对象“id”属性等于 Key - python - 使用 Pandas 计算给定半径内的列中的单元格数
- python - Python循环直到条件满足
- go - 构建简单 cgo 模块的问题
- .htaccess - .htaccess 将整个站点从非 www/http 重定向到 www/https
- javascript - 正则表达式替换正数和负数之间的逗号
- mysql - 无法弄清楚如何编写 MySQL Query