Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无需上传文件的Multer access req.body_Node.js_Multer - Fatal编程技术网

Node.js 无需上传文件的Multer access req.body

Node.js 无需上传文件的Multer access req.body,node.js,multer,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.

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

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(),因为我有文件输入,并且我得到了“意外字段”错误,如果我不使用.array(),我将无法获得post请求正文。是否需要先获取带有enctype=“multipart/form data”的表单文本字段,然后上载文件

更新#2 由于我能够在不上传文件的情况下获得文本字段,我成功地将我的艺术家添加到了我的数据库中,但是我不知道以后如何上传文件, 我在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)
似乎不起作用。

尝试使用multer的
any()
函数:

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,
  });
});
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,
  });
});
如果您确定不会提交任何文件,请使用multer的
none()
函数:

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,
  });
});
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,
  });
});

尝试使用multer的
any()
函数:

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,
  });
});
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,
  });
});
如果您确定不会提交任何文件,请使用multer的
none()
函数:

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,
  });
});
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,
  });
});

如果要在创建艺术家后上载文件,其余方法是创建艺术家,返回一个带有位置响应头的201 CREATED响应(可能还有一个带有新创建对象的主体)。然后,客户机将解析响应主体或响应头以确定新对象的ID,然后发出第二个请求来发布文件。(或者,您可以在第一个请求中发送文件,然后一次完成所有操作)。如果您想在创建艺术家后上载文件,其余方法是创建艺术家,返回一个带有位置响应头的201 CREATED响应(可能还有一个带有新创建对象的主体)。然后,客户机将解析响应主体或响应头以确定新对象的ID,然后发出第二个请求来发布文件。(或者,您可以在第一次请求时发送文件,然后一次完成所有操作)。