使用带有表达式

时间:2015-06-15 06:49:23

标签: node.js express multer busboy

我正在使用multer将文件保存在通过express& amp;的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.

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

试试这个

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/

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

从下面的代码(来自muter index.js文件的源代码)可以看出,如果你没有传递 onError 回调,那么错误将由express处理。

    fileStream.on('error', function(error) {
      // trigger "file error" event
      if (options.onError) { options.onError(error, next); }
      else next(error);
    });

答案 4 :(得分:0)

当用户向您发送任何内容时,请小心系统

我通常设置更多[* 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);
});

package:“ multer”:“ ^ 1.4.2”

答案 5 :(得分:0)

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