如何在控制器中使用多重功能而不是在路由中使用

How to use multer function in controller instead of using in route

我想在控制器文件中使用 multer 函数但是问题是 req.body 当我使用邮递员表单数据正文上传图像时未定义这是 link 到 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 空图像

postman 表单数据图片

谁知道怎么做

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

此包可帮助您解析表单数据和文件数据本身。

你只能在路由中使用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)
        }
    }