使用expressjs进行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将文件保存在指定的目标文件夹中。
所有这一切工作正常,但我有以下问题:
- 如果由于各种原因文件保存失败,看起来像我的路线将始终返回状态204。
- 我不确定在文件保存后或文件asynchronous保存时状态204是否callback,返回状态204。
你可以使用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
在上传完成时logging消息,并将其与您的路由处理程序调用时进行比较。
查看代码,当文件已经完全上传时, multer
调用下一个中间件/路由处理程序。
正如你从下面的代码(来自muter index.js文件的源代码)所看到的那样,如果你没有传递onErrorcallback,那么错误将被express处理。
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 }) }
ref:
http://wiki.workassis.com/nodejs-express-get-post-multipart-request-handling-example/