如何将 .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 模块返回到服务器文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从initstate传递给flutter中的小部件

如何将选定的值从第二类发送到 iPhone 中的第一类 indexpath.row

如何将变量的值从一个 div 传递到同一模板中的另一个 div?

将 Jquery 中的值从一个 html 类传递到 PhoneGap 中的另一个 html 类

如何更新json文件中的值并通过node.js保存

循环执行 Node JS 中的 fetch 操作