无法使用快速错误处理程序处理 Multer
Unable to handle Multer using express error handler
我已经尝试通过以下方式处理错误,但它不起作用。有什么问题吗?
const storage = new gridfsStorage({
url : 'mongodb://localhost:27017/uploadeditems' ,
file : (req , file) => {
if(file.mimetype === 'image/jpeg') {
return {
filename : file.originalname,
bucketName : 'Images'
}
}
else if(file.mimetype === 'application/pdf') {
return {
filename : file.originalname ,
bucketName : 'projectPDFs'
}
}
else {
return null
}
}
})
upload = multer({storage })
app.get('/' , (req , res) => {
res.render('upload')
})
app.post('/upload' , upload.single('pproject') , async (req, res) => {
res.render('upload' , {
msg : "File has been uploaded successfully"
})
} ,
(err , req , res) => {
res.json({
msg : "Some error occured"})
)
我假设如果发生某些错误,upload.single() 将调用 next(err) ,它将被最后一个错误处理程序捕获。
当 multer 在您的情况下调用 next(err)
时,它不会继续到您的请求处理程序上的下一个中间件。相反,它转到安装在 Express 顶层的错误处理程序,如:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
});
请参阅有关此 here 的快速文档。
如果您没有安装快速错误处理程序,则会转到 default express error handler。
如果您想在此请求处理程序中本地处理错误,那么您可以使用 中所示的调用约定,您可以在其中手动调用 upload(req, res, function(err) { ...})
并将其传递给您自己的 next()
处理程序,以便您可以在本地检测和拦截您自己的下一个回调函数中的任何错误。
我已经尝试通过以下方式处理错误,但它不起作用。有什么问题吗?
const storage = new gridfsStorage({
url : 'mongodb://localhost:27017/uploadeditems' ,
file : (req , file) => {
if(file.mimetype === 'image/jpeg') {
return {
filename : file.originalname,
bucketName : 'Images'
}
}
else if(file.mimetype === 'application/pdf') {
return {
filename : file.originalname ,
bucketName : 'projectPDFs'
}
}
else {
return null
}
}
})
upload = multer({storage })
app.get('/' , (req , res) => {
res.render('upload')
})
app.post('/upload' , upload.single('pproject') , async (req, res) => {
res.render('upload' , {
msg : "File has been uploaded successfully"
})
} ,
(err , req , res) => {
res.json({
msg : "Some error occured"})
)
我假设如果发生某些错误,upload.single() 将调用 next(err) ,它将被最后一个错误处理程序捕获。
当 multer 在您的情况下调用 next(err)
时,它不会继续到您的请求处理程序上的下一个中间件。相反,它转到安装在 Express 顶层的错误处理程序,如:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
});
请参阅有关此 here 的快速文档。
如果您没有安装快速错误处理程序,则会转到 default express error handler。
如果您想在此请求处理程序中本地处理错误,那么您可以使用 upload(req, res, function(err) { ...})
并将其传递给您自己的 next()
处理程序,以便您可以在本地检测和拦截您自己的下一个回调函数中的任何错误。