如何避免 Node js 中强大功能的提前返回

Posted

技术标签:

【中文标题】如何避免 Node js 中强大功能的提前返回【英文标题】:How to avoid early return on formidable functions in Node js 【发布时间】:2020-04-25 14:00:36 【问题描述】:

我使用以下代码在node js中上传和读取文件。除了从该方法提早返回外,它按预期工作。该方法在触发“fileBegin”和“file”事件之前返回。您能否告诉我需要对其进行哪些更改才能使其仅在文件上传和处理后才返回?

const form = new formidable.IncomingForm();

form.parse(req);
form.on('fileBegin', async function (name, file) 
...............

);
form.on('file', async function (name, file) 
...............

)
.on("end", function () 
...............
);


......................
......................
......................

 return "Success"

【问题讨论】:

【参考方案1】:

使用中间件

const fs = require('fs')
const fileType = require('file-type')
const multiparty = require('multiparty')
const uploadMiddleware = (request, response, next) => 
      if (request.method !== 'POST') 
        next()
        return
      

      const form = new multiparty.Form()
      form.parse(request, async (error, fields, files) => 
        if (error) throw new Error(error);

         //  const file = files.file[0]
          // const buffer = fs.readFileSync(file.path)
          // request.file = your file 

          next()
         catch (error) 
          return response.status(400).send(error)
        
      )
    
app.post('/upload', multipartUpload, yourController)

【讨论】:

谢谢法迪。我需要使用 Foarmidable 表单创建表单和事件触发。 谢谢法迪。但我需要使用强大的表单来进行文件上传和处理 重要的部分是在你不使用时将next 函数传递给控制器​​!

以上是关于如何避免 Node js 中强大功能的提前返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在渲染 ejs 视图 Node.js 时捕获错误

如何正确配置服务器和浏览器以避免cors错误?获取 API + Node.js

Socket.io node.js,如何避免记录连接时间或考虑页面刷新/多个套接字?

如何在 Node.js 上建立网站?

如何返回 Node.js 回调

如何从私有存储库(Node.js)返回 Github 问题