【发布时间】: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