我正在尝试简化获取文档文件属性并即时转换为temp S3链接的过程。通常,我一直在获取控制器中的所有文档,然后遍历并替换链接,然后再传递给视图。这可以工作,但是如果控制器逻辑很复杂,可能会有些混乱。我正在尝试为我的架构编写一个自定义方法,其中这些链接更容易替换。以下内容将打印出控制台中的链接,但由于javascript的出色异步特性,其在视图中未显示。有没有类似的方法可以使它正常工作?
也许创建一种类似于填充方法的方法?
ExampleSchema.js:
exampleSchema.methods.getS3Link = function(file_name, callback) {
const s3 = new aws.S3();
const s3Params = {
Bucket: process.env.S3_BUCKET,
Key: file_name,
Expires: 6000
};
s3.getSignedUrl('getObject', s3Params, function (err, data) {
console.log(data); //prints out the correct link
return data; //shows undefined in view
})
}
答案 0 :(得分:0)
callback
函数有一个getS3Link
参数。您可以在此回调函数中传递data
以便在视图中检索它。
exampleSchema.methods.getS3Link = function(file_name, callback) {
const s3 = new aws.S3();
const s3Params = {
Bucket: process.env.S3_BUCKET,
Key: file_name,
Expires: 6000
};
s3.getSignedUrl('getObject', s3Params, function (err, data) {
console.log(data); //prints out the correct link
callback(null, data);
})
}
更简单:
exampleSchema.methods.getS3Link = function(file_name, callback) {
const s3 = new aws.S3();
const s3Params = {
Bucket: process.env.S3_BUCKET,
Key: file_name,
Expires: 6000
};
s3.getSignedUrl('getObject', s3Params, callback);
}