如何将 .then() 中的值从 Node.js 模块返回到服务器文件?
Posted
技术标签:
【中文标题】如何将 .then() 中的值从 Node.js 模块返回到服务器文件?【英文标题】:How to return a value inside the .then() from Node.js module to server file? 【发布时间】:2020-12-04 22:41:12 【问题描述】:我正在尝试构建一个模块函数,该函数将使用 Sharp 调整传递给它的图像的大小。
我将图像数据完美地记录在下面给出的.then()
中,但是当我return
得到同样的结果时,结果却是undefined
。
请帮我找出我在这里做错了什么。
模块
exports.scaleImg = function (w,h,givenPath)
let toInsertImgData;
sharp(givenPath)
.resize(w, h)
.jpeg(
quality: 80,
chromaSubsampling: "4:4:4",
)
.toFile(compressedImgPath)
.then(() =>
fsPromises.readFile(compressedImgPath).then((imgData) =>
toInsertImgData =
data: imgData,
contentType: "image/jpeg",
;
console.log(toInsertImgData);
return(toInsertImgData);
);
);
这里compressedImgPath
只是根目录中文件夹的路径。
服务器文件
const imageScalingModule = require(__dirname+"/modules.js");
app.post("/compose",upload.fields([ name: "propic" , name: "image" ]),
(req, res) =>
console.log(imageScalingModule.scaleImg(640, 480, req.files.image[0].path));
);
【问题讨论】:
【参考方案1】:then()
returns a promise,因此您需要更改/compose
-handler 中的代码以等待promise 解决(我使用的是async/await
,但您也可以使用scaleImg(...).then()
):
app.post("/compose",upload.fields([ name: "propic" , name: "image" ]),
async (req, res) =>
const res = await imageScalingModule.scaleImg(640, 480, req.files.image[0].path);
console.log(res);
res.send(res); // you probably want to do something like this, otherwise the request hangs
);
【讨论】:
以上是关于如何将 .then() 中的值从 Node.js 模块返回到服务器文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将选定的值从第二类发送到 iPhone 中的第一类 indexpath.row
如何将变量的值从一个 div 传递到同一模板中的另一个 div?