使用带有 expressjs 的 multer 上传文件时的错误处理
Error handling when uploading file using multer with expressjs
我正在使用 multer 将文件保存在通过 express & nodejs 开发的服务器上。
我正在使用以下代码。
var express = require('express'),
multer = require('multer')
var app = express()
app.get('/', function(req, res){
res.send('hello world');
});
app.post('/upload',[ multer({ dest: './uploads/'}), function(req, res){
res.status(204).end()
}]);
app.listen(3000);
Multer 将文件保存在指定的目标文件夹中。
一切正常,但我有以下问题:
- 如果由于各种原因导致文件保存失败,貌似我的路由总是return status 204.
- 我不确定状态 204 是在文件保存后返回还是在异步保存文件时状态 204 是 returned。
您可以使用 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 处理。
我认为(不是 100% 确定,因为这取决于 multer
的实现方式)当文件被保存。您可以使用 onFileUploadComplete
在上传完成时记录消息,并将其与调用路由处理程序时进行比较。
查看代码,multer
在文件完全上传后调用下一个 middleware/route 处理程序。
正如您从下面的代码中看到的(来自 muter index.js 文件的源代码),如果您不传递 onError 回调,错误将由快递。
fileStream.on('error', function(error) {
// trigger "file error" event
if (options.onError) { options.onError(error, next); }
else next(error);
});
试试这个
var upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return
}
// Everything went fine
})
}
参考:
http://wiki.workassis.com/nodejs-express-get-post-multipart-request-handling-example/
这是编写处理上传和错误的 multer 中间件的方法
const multer = require("multer");
function uploadFile(req, res, next) {
const upload = multer().single('yourFileNameHere');
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.
next()
})
}
当用户向您发送任何内容时请小心系统
我一般多设置[*option1]:
process.on('uncaughtException', function(ls){
// console.log(ls);
(function(){})();
});
然后:
var upload= multer({ dest: __dirname + '/../uploads/' }).single('photos');
// middle ..
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
console.log('MulterError', err);
} else if (err) {
// An unknown error occurred when uploading.
// Work best when have [*option1]
console.log('UnhandledError', err);
}
if(err) {
return res.sendStatus(403);
}
res.sendStatus(200);
});
包:“multer”:“^1.4.2”
var multer = require('multer')
var upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
handle error
} else if (err) {
handle error
}
else{
write you code
}
})
})
you can see this from the [documentation][1]
[1]: https://www.npmjs.com/package/multer#error-handling
我正在使用 multer 将文件保存在通过 express & nodejs 开发的服务器上。
我正在使用以下代码。
var express = require('express'),
multer = require('multer')
var app = express()
app.get('/', function(req, res){
res.send('hello world');
});
app.post('/upload',[ multer({ dest: './uploads/'}), function(req, res){
res.status(204).end()
}]);
app.listen(3000);
Multer 将文件保存在指定的目标文件夹中。
一切正常,但我有以下问题:
- 如果由于各种原因导致文件保存失败,貌似我的路由总是return status 204.
- 我不确定状态 204 是在文件保存后返回还是在异步保存文件时状态 204 是 returned。
您可以使用 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 处理。
我认为(不是 100% 确定,因为这取决于 multer
的实现方式)当文件被保存。您可以使用 onFileUploadComplete
在上传完成时记录消息,并将其与调用路由处理程序时进行比较。
查看代码,multer
在文件完全上传后调用下一个 middleware/route 处理程序。
正如您从下面的代码中看到的(来自 muter index.js 文件的源代码),如果您不传递 onError 回调,错误将由快递。
fileStream.on('error', function(error) {
// trigger "file error" event
if (options.onError) { options.onError(error, next); }
else next(error);
});
试试这个
var upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return
}
// Everything went fine
})
}
参考:
http://wiki.workassis.com/nodejs-express-get-post-multipart-request-handling-example/
这是编写处理上传和错误的 multer 中间件的方法
const multer = require("multer");
function uploadFile(req, res, next) {
const upload = multer().single('yourFileNameHere');
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.
next()
})
}
当用户向您发送任何内容时请小心系统
我一般多设置[*option1]:
process.on('uncaughtException', function(ls){
// console.log(ls);
(function(){})();
});
然后:
var upload= multer({ dest: __dirname + '/../uploads/' }).single('photos');
// middle ..
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
console.log('MulterError', err);
} else if (err) {
// An unknown error occurred when uploading.
// Work best when have [*option1]
console.log('UnhandledError', err);
}
if(err) {
return res.sendStatus(403);
}
res.sendStatus(200);
});
包:“multer”:“^1.4.2”
var multer = require('multer')
var upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
handle error
} else if (err) {
handle error
}
else{
write you code
}
})
})
you can see this from the [documentation][1]
[1]: https://www.npmjs.com/package/multer#error-handling