使用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将文件保存在指定的目标文件夹中。

所有这一切工作正常,但我有以下问题:

  1. 如果由于各种原因文件保存失败,看起来像我的路线将始终返回状态204。
  2. 我不确定在文件保存后或文件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/

https://www.npmjs.com/package/multer#error-handling