Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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
Javascript 为什么ExpressJS请求主体不工作_Javascript_Node.js_Express_Body Parser - Fatal编程技术网

Javascript 为什么ExpressJS请求主体不工作

Javascript 为什么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)而不

我是第一次在这里发帖,所以如果有什么问题,请告诉我。 我不熟悉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
“+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