这是我的简单表单:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
这是我的Express.js/Node.js代码:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
我试过sReq。query。email或sReq。查询['email']或sReq。params['邮件'],等等。没有一个有用。它们都返回undefined。
当我更改为Get调用时,它可以工作,所以。任何想法?
更新
从Express 4.16+版本开始,它们自己的主体解析器实现现在包含在默认的Express包中,因此您不需要下载另一个依赖项。
您可能在代码中添加了如下所示的一行:
app.use(bodyparser.json()); //utilizes the body-parser package
如果您正在使用Express 4.16+,您现在可以将这一行替换为:
app.use(express.json()); //Used to parse JSON bodies
因为express.json()中的代码是基于bodyparser.json()的,所以这不会在应用程序中引入任何破坏性的更改。
如果你的环境中也有以下代码:
app.use(bodyParser.urlencoded({extended: true}));
你可以用:
app.use(express.urlencoded()); //Parse URL-encoded bodies
最后需要注意的是:仍然有一些非常具体的情况下可能仍然需要body-parser,但在大多数情况下,Express的body-parser实现是大多数用例所需要的。
(详见expressjs/bodyparser中的文档)。
其他回答讨论了在服务器端使用的中间件。我的回答试图为开发人员提供一个简单的剧本来调试自己的问题。
在这个问题中,情况是:
在客户端有一个表单
数据是通过点击提交按钮发送的,你不使用JavaScript发送请求(所以没有fetch, axios, xhr,…但我们可以在以后针对这些情况扩展解决方案)
您在服务器端使用Express
您无法访问Express代码中的数据。要求的事情。Body未定义
下面是一些你可以自己找到解决方法的方法:
打开Network选项卡并搜索您的请求。
检查请求头Content-Type。在这种情况下(表单提交),头可能是application/x-www-form-urlencoded或multipart/form-data如果你发送一个文件(与enctype="multipart/form-data"在表单标签)
现在,如果您使用适当的中间件来解析传入的请求,请检查Express代码。
如果你的Content-Type是application/x-www-form-urlencoded,那么你应该有app.use(express. use)。Urlencoded ({extended: true}))。
如果您的Content-Type是multipart/form-data:因为Express没有内置的中间件来解析这类请求,您应该使用另一个库。穆尔特是个不错的选择。
如果您已经完成了上面的所有步骤,现在就可以访问所需的数据了。身体:)。如果语法有问题,应该检查Express文档页面。语法可以改变,因为这个问题是很久以前发布的。
现在,我们可以将这个简单的剧本扩展到涉及JavaScript代码的其他情况。关键是检查请求的Content-Type。如果你看到application/json,那么你应该在你的代码中使用app.use(express.json())。
总之,找到您的请求Content-Type,然后使用适当的中间件来解析它。
适用于Express 4.1及以上版本
因为大多数答案都是使用Express, bodyParser, connect;其中不建议使用多部分。有一种安全的方法可以轻松地发送post多部分对象。
Multer可以用来代替connect.multipart()。
安装包
$ npm install multer
在你的应用中加载它:
var multer = require('multer');
然后,将它与其他表单解析中间件一起添加到中间件堆栈中。
app.use(express.json());
app.use(express.urlencoded());
app.use(multer({ dest: './uploads/' }));
Connect.json()处理application/json
Connect.urlencoded()处理application/x-www-form-urlencoded
multer()处理多部分/表单数据