Javascript 为什么ExpressJS请求主体不工作
我是第一次在这里发帖,所以如果有什么问题,请告诉我。 我不熟悉node和express。我已经创建了一个简单的注册表,但是当我按下Register(submit)按钮时,我得到了req.body.name作为“Undefined”。 下面我附上了我的app.js、users.js和register.jade文件 杰德先生 app.js users.jsJavascript 为什么ExpressJS请求主体不工作,javascript,node.js,express,body-parser,Javascript,Node.js,Express,Body Parser,我是第一次在这里发帖,所以如果有什么问题,请告诉我。 我不熟悉node和express。我已经创建了一个简单的注册表,但是当我按下Register(submit)按钮时,我得到了req.body.name作为“Undefined”。 下面我附上了我的app.js、users.js和register.jade文件 杰德先生 app.js users.js 正文属性不是响应的成员,它是请求的成员。因此,您的代码应该是正确的,如下所示 使用console.log('hello'+req.body)而不
正文
属性不是响应
的成员,它是请求
的成员。因此,您的代码应该是正确的,如下所示
使用console.log('hello'+req.body)
而不是console.log('hello
“+res.body)代码>
这是因为您没有正确使用multer
// Declare
var upload = multer({ dest: 'uploads/' })
...
/**
* Use multer as the middleware for this route. This is should parse multipart/form-data encoding
* and pick up the uploaded image file and assign to req.file.
**/
router.post('/register', upload.single('profileimage), function (req, res, next) {
console.log(req.file); // you will see fields related to your uploaded file.
console.log(req.body); // you will see your form fields
...
})
...
首先,尝试在表单中不包含文件的情况下从表单元素中删除enctype属性
enctype='multipart/form-data'
您的主体解析器必须在其中工作,然后您将在req.body属性中获得请求数据。
如果您打算使用enctype通过表单上传文件,
您必须正确配置multer,将此代码放在users.js文件中
var multer = require('multer');
var upload = multer({ dest: './uploads' }); // make sure you have uploads folder
//(I would recommend using disk storage for complete control over uploaded files).
当您处理您的post请求时
router.post('/register', upload.single('field_name'), function(req,res,next){
//req.body will have text data
// req.file will have file uploaded via form.
});
// make sure what ever you have name attribute value in from file input
// use that instead of <filed_name>. in your case 'profileimage'.
如果使用uplaod,则将在中使用.array()文件
req.file
req.files
所有文本字段值都将以
req.body
尝试删除jade文件中的enctype='multipart/form data',直到@fanchuengi不起作用。我想在你的users.js
中,你可以使用var router=express.router()重新初始化快速路由
覆盖所有应用程序。使用app.js中的
语句。尝试添加一些应用程序。使用users.js中的
语句,更改应用程序除外。使用
到路由器。使用
@FanCheung@MarkDodds我认为问题在于多部分数据处理。我猜multer无法正确导出多部分数据。我从未使用过multer,但不确定。尝试使用busboy body解析器
。这将向req.file.*
添加图像数据,并向req.body
添加JSON数据。
router.post('/register', upload.single('field_name'), function(req,res,next){
//req.body will have text data
// req.file will have file uploaded via form.
});
// make sure what ever you have name attribute value in from file input
// use that instead of <filed_name>. in your case 'profileimage'.
req.file
req.files
req.body