【问题标题】:Catching error from multer using ".fields" property使用“.fields”属性从 multer 中捕获错误
【发布时间】:2021-08-23 13:12:17
【问题描述】:

我似乎无法弄清楚如何使用“.fields”属性来捕捉 multer 错误。用户应该上传 4 张照片,所以我使用 .fields 属性上传到我的 mongodb 数据库。

这是我的 multer 配置文件,名为 s-multer

// [REQURIE] //
const crypto = require('crypto')
const multer = require('multer')
const MulterGridFsStorage = require('multer-gridfs-storage')
const path = require('path')


// [REQUIRE] Personal //
const config = require('../s-config')

module.exports = {
        upload: multer({
            storage: new MulterGridFsStorage({
                url: config.MONGO_URI,
        
                file: (req, file) => {
                    try {
                        return new Promise((resolve, reject) => {
                            crypto.randomBytes(16, (err, buf) => {
                                if (err) { return reject(err) }
                                
                                const filename = buf.toString('hex') + path.extname(
                                    file.originalname
                                )
            
                                resolve({
                                    filename: filename,
                                    bucketName: 'uploads'
                                })
                            })
                        })
                    } catch (err) { console.log('err', err) }
                },
            }),
    
            onError : function(err, next) { console.log('err', err) },
            
            limits: { fileSize: 50000 }
        }),
    }

这是我的用户发送请求的快速路线:

const multer = require('../../../s-multer')
router.post(
    '/create',
    multer.upload.fields(
        [
            { name: 'general_image1', maxCount: 1 },
            { name: 'pump_image1', maxCount: 1 },
            { name: 'pump_image2', maxCount: 1 },
            { name: 'pump_image3', maxCount: 1 },
        ]
    ),
    async (req, res) => {
        // do stuff here
    }
)

上传大于 50kb 的文件时,它会在服务器终端中引发错误,但我不知道如何捕获它并将其发送回用户。

【问题讨论】:

  • 您可以使用 onError 选项处理错误: app.post('/upload',[ multer({ dest : './uploads/', onError : function(err, next) { console. log('error', err); next(err); } }), function(req, res) { res.status(204).end(); } ]);如果您调用 next(err),您的路由处理程序(生成 204)将被跳过,错误将由 Express 处理。

标签: node.js mongodb express multer


【解决方案1】:

想通了。

router.post(
    '/create',
    async (req, res, next) => {
        multer.upload.fields(
            [
                { name: 'general_image1', maxCount: 1 },
                { name: 'pump_image1', maxCount: 1 },
                { name: 'pump_image2', maxCount: 1 },
                { name: 'pump_image3', maxCount: 1 },
            ]
        )(req, res, (err) => {
            if (err) {
                    // SEND CAUGHT ERROR!
                    res.send(err)
                }
                else { next() }
            })
        },
        async (req, res) => {
            // do stuff here
        }
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2017-09-02
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多