Multer访问req.body而不上传文件

时间:2016-12-15 18:24:35

标签: node.js multer

我有一个包含一些文本字段和文件输入的表单,不能为空,我想先对文本字段进行一些操作(添加到数据库),如果这些操作成功,则上传文件。这是我现在的代码:

var multer = require('multer');
var getFields = multer();
router.post('/add',getFields.array(),function(req,res){
var artist = new ArtistModel({
            name : req.body.name.toLowerCase(),
            description:req.body.description,
          });

然后我将艺术家添加到我的数据库中,并且在成功的回调中我想要上传文件。问题是我不能简单地使用getFields.array()因为我有文件输入而且我得到了#34;意外字段"错误,如果我不使用.array()我将无法获得帖子请求正文。无论如何要使用enctype =" multipart / form-data"来获取表单文本字段。首先然后上传文件?

更新#2 感谢Dave我能够在不上传文件的情况下获取文本字段,我成功地将我的艺术家添加到我的数据库中,但是我无法弄清楚如何上传文件, 我在addToDb的回调函数中创建了一个新变量:

var storage = multer.diskStorage({
            destination: function (req, file, cb) {
              //cb(null, 'artistsMedia/drake/songs')
              var dir = 'artistsMedia/' + req.body.name.toLowerCase()+ '/images';
              mkdirp(dir,err => cb(err,dir))
            },
            filename: function (req, file, cb) {
              cb(null, req.body.name.toLowerCase() +'-'+ file.fieldname +'-'+ Date.now() + path.extname(file.originalname)) //Appending extension
            },

          });
          var upload = multer({
            storage: storage,
            limits :{fileSize :52428800}
          }).fields([{name:'Logo',maxCount:1},{name:'artistHome',maxCount:1},{name:'otherImgs',maxCount:10}]);

然而,调用upload(req,res,err)似乎无效。

1 个答案:

答案 0 :(得分:2)

尝试使用multer的var multer = require('multer'); var getFields = multer(); router.post('/add',getFields.any(),function(req,res){ // any files, if sent, will be in req.files var artist = new ArtistModel({ name : req.body.name.toLowerCase(), description:req.body.description, }); }); 函数:

none()

如果您确定没有提交文件,请使用multer的var multer = require('multer'); var getFields = multer(); router.post('/add',getFields.none(),function(req,res){ // uploading files will cause an error var artist = new ArtistModel({ name : req.body.name.toLowerCase(), description:req.body.description, }); }); 函数:

{{1}}