如果上传文件后需要使用中间件,如何使用 Multer 处理异常
How can I handle exceptions using Multer if I need to use middlewares after uploading a file
Multer是Express JS推荐的上传文件的中间件包。检查他们使用的错误处理部分 this example:
const multer = require('multer')
const upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
} else if (err) {
// An unknown error occurred when uploading.
}
// Everything went fine.
})
})
如您所见,该错误处理示例是在路由的常规代码中执行的。
这对我来说是个问题,因为我需要在执行两个像这样的中间件函数之前处理这些错误
app.post('/profile', [middlewareFunctions.Authenticate,middlewareFunctions.getDataUploadedFile], function (req, res) {
})
所以基本上我的问题是,在执行中间件之前,我可以在哪里使用 Multer 的错误处理部分?。谢谢
PS: Someone already posted this question on Whosebug 但没有正确说明并举例说明了它是如何解决的,而且这个问题是两年前发布的,所以我不认为他答案与当前版本的 Multer 兼容。
我探索过 "onError" function was removed long ago, and 也不会起作用。所以我们需要使用手动和简单的方法。
我有一些用于处理多个错误的小片段(简单的服务器示例)。在所有 app.use(...) 中间件之后,只需编写确切的代码块,如下所示:
const port = process.env.APP_PORT || 3001;
const http = require('http');
const express = require('express');
const app = express();
const multer = require('multer');
// Routes
// app.get('/', () => { ... });
// Handling errors for 404 not-founds
app.use((req, res) => {
res.status(404).json({
err_code: 404,
err_message: "URL-endpoint not found!"
});
});
// EXACT PART >>>
app.use((err, req, res, next) => {
if (err instanceof multer.MulterError) { // Multer-specific errors
return res.status(418).json({
err_code: err.code,
err_message: err.message,
});
} else { // Handling errors for any other cases from whole application
return res.status(500).json({
err_code: 409,
err_message: "Something went wrong!"
});
}
});
// EXACT PART <<<
// Running the server
http.createServer(app);
app.listen(port, () => {
console.log(`Server started on port ${port} !!!`);
});
此外,您可以使用这些 multer standard messages 进行自定义。
Multer是Express JS推荐的上传文件的中间件包。检查他们使用的错误处理部分 this example:
const multer = require('multer')
const upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
} else if (err) {
// An unknown error occurred when uploading.
}
// Everything went fine.
})
})
如您所见,该错误处理示例是在路由的常规代码中执行的。 这对我来说是个问题,因为我需要在执行两个像这样的中间件函数之前处理这些错误
app.post('/profile', [middlewareFunctions.Authenticate,middlewareFunctions.getDataUploadedFile], function (req, res) {
})
所以基本上我的问题是,在执行中间件之前,我可以在哪里使用 Multer 的错误处理部分?。谢谢
PS: Someone already posted this question on Whosebug 但没有正确说明并举例说明了它是如何解决的,而且这个问题是两年前发布的,所以我不认为他答案与当前版本的 Multer 兼容。
我探索过 "onError" function was removed long ago, and
我有一些用于处理多个错误的小片段(简单的服务器示例)。在所有 app.use(...) 中间件之后,只需编写确切的代码块,如下所示:
const port = process.env.APP_PORT || 3001;
const http = require('http');
const express = require('express');
const app = express();
const multer = require('multer');
// Routes
// app.get('/', () => { ... });
// Handling errors for 404 not-founds
app.use((req, res) => {
res.status(404).json({
err_code: 404,
err_message: "URL-endpoint not found!"
});
});
// EXACT PART >>>
app.use((err, req, res, next) => {
if (err instanceof multer.MulterError) { // Multer-specific errors
return res.status(418).json({
err_code: err.code,
err_message: err.message,
});
} else { // Handling errors for any other cases from whole application
return res.status(500).json({
err_code: 409,
err_message: "Something went wrong!"
});
}
});
// EXACT PART <<<
// Running the server
http.createServer(app);
app.listen(port, () => {
console.log(`Server started on port ${port} !!!`);
});
此外,您可以使用这些 multer standard messages 进行自定义。