Javascript 主体解析器未定义,req.Body
因此,我有这个帖子路线来向我的MongoDB添加一些产品Javascript 主体解析器未定义,req.Body,javascript,node.js,express,body-parser,Javascript,Node.js,Express,Body Parser,因此,我有这个帖子路线来向我的MongoDB添加一些产品 router.post('/addprod',mid.reqAdmin,function(req,res,next){ if(req.body.category && req.body.name && req.body.price && req.body.description && req.files) {
router.post('/addprod',mid.reqAdmin,function(req,res,next){
if(req.body.category && req.body.name && req.body.price && req.body.description && req.files)
{
upload(req,res,function(err) {
console.log("req.body"); //form fields
console.log(req.body);
console.log("req.file");
console.log(req.files); //form files
})
var prodData={
name: req.body.name,
price: req.body.price,
description: req.body.description,
category: req.body.category,
images: req.files.filename
};
console.log(prodData);
Prod.create(prodData,function (error, product) {
if (error) {
req.flash('error','Error');
return res.redirect('/addprod');
}
else{
req.flash('success', 'Success');
return res.redirect('/addprod');
}
});
}else
{
req.flash('error','All Fields Required');
return res.redirect('/addprod');
}
});
我有一个(哈巴狗/翡翠)模板:
.form
form(enctype="multipart/form-data" action='/addprod' method='POST')
input(type="text" id='category' placeholder="Category name='category')
input(type="text" id='name' placeholder="Name" name='name')
input(type="text" id='price' placeholder="Price" name='price')
input(type="text" id='description' placeholder="Description" name='description')
input(type="file" name="images" multiple)
button(type="submit") Add
因此,当我点击“添加”按钮并填充所有字段时,我会得到“所有必填字段”
我将一些控制台日志放在IF语句之前,得到req.body.name=undefined
和req.body={}。我不知道为什么我会这样。
在app.js文件中,我有body解析器。我的意思是在每一条路线上,但这个身体解析器都能工作 不处理多部分/表单数据
。为此,您需要/或类似的npm包
例如:
在express配置中的某个位置
// ...
const formidableMiddleware = require('express-formidable');
//...
app.use(formidableMiddleware({
encoding: 'utf-8',
multiples: true
});
// ...
然后在控制器文件中,您可以使用req.fields
访问文本字段(例如category
,name
)和req.files
访问二进制数据(例如图像
)
示例:
router.post('/addprod', mid.reqAdmin, function(req, res, next) {
if(req.fields.category &&
req.fields.name &&
req.fields.price &&
req.fields.description &&
req.files) {
// ...
} else {
// ...
}
});
body parser
不处理多部分/表单数据。
您需要multer
/强大的npm包