gpt4 book ai didi

node.js - multer访问req.body,无需上传文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:24 27 4
gpt4 key购买 nike

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

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() 我将无法获取发布请求正文。是否有办法先获取 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)似乎不起作用。

最佳答案

尝试使用 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,
});
});

如果您确定不会提交任何文件,请使用 multer 的 none() 函数:

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

关于node.js - multer访问req.body,无需上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41170918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com