【问题标题】:How to use multer function in controller instead of using in route如何在控制器中使用 multer 函数而不是在路由中使用
【发布时间】:2020-10-09 11:51:13
【问题描述】:

我想在控制器文件中使用multer 函数但问题是req.body 在我使用邮递员表单数据主体上传图像时未定义这是指向code 的链接,我正在使用 multer 函数但我想在我的控制器中使用它

我想如何使用它,你可以在下面的代码中看到

const multerHelper = require("../helpers/multer_helper");

Documents: async (req, res) => {
    console.log(req.body)
    if (!req.body.id) {
        console.log(req.body)
        logger.warn(error.MANDATORY_FIELDS);
        return res.status(500).send(error.MANDATORY_FIELDS)
    }

    try {
        multerHelper.createUserImage
        let result = error.OK
        logger.info(result);
        return res.status(200).send(result)

    } catch (err) {
        logger.warn(err);
        console.log(err);
        return res.status(500).send(error.SERVER_ERROR)
    }
}

但它会引发类似req.body undefine 的错误

req.body 空图像

邮递员表单数据图像

谁知道怎么做

【问题讨论】:

    标签: javascript node.js multer


    【解决方案1】:

    你可以只在路由中使用multer函数和对象,如果你想在控制器中使用它,你必须在控制器中编写存储和上传函数,这里我使用了multer错误处理,我正在上传多张图片

    Documents: async (req, res) => {
    
            if (!req.headers.room_id) {
                logger.warn(error.MANDATORY_FIELDS);
                return res.status(500).send(error.MANDATORY_FIELDS)
            }
    
            try {
                let storage = multer.diskStorage({
                    destination: function (req, file, cb) {
                        let id = req.headers.room_id;
                        let path = `tmp/daily_gasoline_report/${id}`;
                        fsextra.mkdirsSync(path);
                        cb(null, path);
                    },
                    filename: function (req, file, cb) {
                        // console.log(file);
                
                        let extArray = file.mimetype.split("/");
                        let extension = extArray[extArray.length - 1];
                        cb(null, file.fieldname + '-' + Date.now() + "." + extension);
                    }
                })
                var upload = multer({ storage: storage }).array('images', 100);
                upload(req, res, function (err) {
                    if (err) {
                        console.log(err);
                        return res.end("Error uploading file.");
                    } else {
                        res.end("File has been uploaded");
                    }
                });
                let result = error.OK
                logger.info(result);
                return res.status(200).send(result)
    
            } catch (err) {
                logger.warn(err);
                console.log(err);
                return res.status(500).send(error.SERVER_ERROR)
            }
        }
    

    【讨论】:

      【解决方案2】:

      你有解析器吗? 你如何解析数据? 您将需要使用可以为您提供此数据的东西,例如: https://www.npmjs.com/package/express-fileupload

      这个包可以帮助你解析表单数据和文件数据本身。

      【讨论】:

      • 我正在使用 multer 像这样 stackoverflow.com/a/64117357/12761193 但现在我想在控制器中使用它而不是在路由中
      • 您需要了解 multer 正在做什么,它正在解析文件数据。这个 express-fileupload 正在解析数据并将其放在 req.files 上,然后您将能够在端点上使用它
      猜你喜欢
      • 1970-01-01
      • 2017-08-24
      • 2017-11-21
      • 2022-10-12
      • 2011-08-06
      • 2021-06-17
      • 2022-12-03
      • 1970-01-01
      • 2015-05-06
      相关资源
      最近更新 更多