使用带有 expressjs 的 multer 上传文件时的错误处理

新手上路,请多包涵

我正在使用 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. 我不确定是在保存文件后返回状态 204 还是在异步保存文件时返回状态 204。

原文由 SharpCoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

您可以使用 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 当文件完全上传时调用下一个中间件/路由处理程序。

原文由 robertklep 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Raad Altaie 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题