【问题标题】:Make multer upload an asyc function让 multer 上传一个异步函数
【发布时间】:2020-11-12 02:37:36
【问题描述】:

我正在尝试上传图片,因为用户正在注册如何使上传“异步”?因为我需要用户创建的响应,即希望按如下方式使用等待

const user = await db.User.create(req.body);

以下是我的代码:

const upload = multer({ 
    storage: storage,
    fileFilter: fileFilter 
}).single('upload'); 


exports.user_register = async (req, res, next) => {
try { 
    upload(req, res, (err) => {
        try {
            if (typeof req.file === 'undefined') {
                **const user = db.User.create(req.body);**
                const {id, username} = user;
                res.status(201).json({id, username});               
            } else {

                    .
                    .
                    .
            }

【问题讨论】:

    标签: node.js express asynchronous async-await multer


    【解决方案1】:

    上传函数与您的 user_register 函数具有相同的格式,因此您也可以简单地使用异步“下一个函数”。

    ...
    upload(req, res, async (err) => {
    ...

    但是,我建议将上传中间件与用户注册功能分开。 您仍然可以从那里访问“文件”属性。

    因此,您同时导出“上传”和“用户注册”功能。

    exports.handle_upload = multer({ 
        storage: storage,
        fileFilter: fileFilter 
    }).single('upload'); 
    
    
    exports.user_register = async (req, res, next) => {
    try { 
      if (typeof req.file === 'undefined') {
          const user = await db.User.create(req.body);
          const {id, username} = user;
          res.status(201).json({id, username});               
      } else {
        ...
      }
      ...
     };

    然后在您的快速路由器中,您可以依次调用这两个函数:

    const { handle_upload, user_register } = require('...');
    ...
    
    router.post('/registeruser', handle_upload, user_register);
    ...

    【讨论】:

    • Thanx Elio .. 事情是这样的,我有很多路线,所以我将它们的逻辑分成两个不同的脚本。这就是上传在 user_register 中的原因。如果也许我可以将上传功能转换为可以解决我的问题的异步功能。
    • 您可以尝试将上传功能包装在一个承诺中,但我不确定这会对您有所帮助。比如:function promiseUpload (req, res, next) { return new Promise((resolve, reject) => upload(req, res, error => error ? reject(error) : resolve()) ); 然后在 user_register 函数中调用这个函数。
    猜你喜欢
    • 2021-10-02
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2018-02-04
    • 2017-09-20
    相关资源
    最近更新 更多