使用Multer和ExpressJS上传文件时的错误处理

Sha*_*der 3 node.js express multer busboy

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

Multer会为我将文件保存在指定的目标文件夹中。

所有这些都工作正常,但我有以下问题:

  1. 如果文件保存由于各种原因而失败,则看来我的路线将始终返回状态204。
  2. 我不确定在保存文件后或异步获取文件时是否取消状态204,是否返回状态204。

Raa*_*aie 9

这是如何编写处理上传和错误的 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()
    })
}
Run Code Online (Sandbox Code Playgroud)

  • 已接受的答案不再有效,这应该是已接受的答案。 (2认同)

Bik*_*h M 6

尝试这个

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 
  })
}
Run Code Online (Sandbox Code Playgroud)

参考:

http://wiki.workassis.com/nodejs-express-get-post-multipart-request-handling-example/

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


rob*_*lep 5

您可以使用以下onError选项处理错误:

app.post('/upload',[
  multer({
    dest    : './uploads/',
    onError : function(err, next) {
      console.log('error', err);
      next(err);
    }
  }),
  function(req, res) {
    res.status(204).end();
  }
]);
Run Code Online (Sandbox Code Playgroud)

如果调用next(err),则将跳过您的路由处理程序(生成204),并且Express将处理该错误。

认为(不确定100%取决于multer实现方式)在保存文件时将调用您的路由处理程序。onFileUploadComplete上传完成后,您可以用来记录一条消息,并将其与调用路由处理程序时进行比较。

查看代码,multer当文件完全上传后,调用下一个中间件/路由处理程序。

  • 在Multer 1.0.0中删除了“ onError”。 (7认同)