这是我的简单表单:
<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调用时,它可以工作,所以。任何想法?
特快4用户注意事项:
如果你试着把app.use(express.bodyParser());进入你的应用程序,你会得到以下错误当你试图启动你的Express服务器:
错误:大多数中间件(如bodyParser)不再与Express捆绑,必须单独安装。请参见https://github.com/senchalabs/connect#middleware。
你必须从npm中单独安装包体解析器,然后使用如下代码(示例取自GitHub页面):
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser());
app.use(function (req, res, next) {
console.log(req.body) // populated!
next();
})
针对Express 4.4.1进行更新
从Express中删除了以下中间件。
身体解析器
杰森
乌伦编码
多部件
当您像在express 3.0中那样直接使用中间件时。你会得到以下错误:
Error: Most middleware (like urlencoded) is no longer bundled with Express and
must be installed separately.
为了利用这些中间件,现在你需要分别为每个中间件做npm。
由于bodyParser被标记为已弃用,所以我推荐以下使用json, urlencode和多部分解析器的方式,如强大的,connect-multiparty。(多部分中间件也已弃用)。
还要记住,只是定义urlencode + json,表单数据不会被解析和请求。Body将未定义。您需要定义一个中间件来处理多部分请求。
var urlencode = require('urlencode');
var json = require('json-middleware');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.use(json);
app.use(urlencode);
app.use('/url/that/accepts/form-data', multipartMiddleware);
注:此答案为特快2。请看这里的3号快车。
如果你使用connect/express,你应该使用bodyParser中间件:它在Expressjs指南中有描述。
// example using express.js:
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(req, res){
var email = req.param('email', null); // second parameter is default
});
以下是仅支持连接的原始版本:
// example using just connect
var connect = require('connect');
var url = require('url');
var qs = require('qs');
var server = connect(
connect.bodyParser(),
connect.router(function(app) {
app.post('/userlogin', function(req, res) {
// the bodyParser puts the parsed request in req.body.
var parsedUrl = qs.parse(url.parse(req.url).query);
var email = parsedUrl.email || req.body.email;;
});
})
);
查询字符串和主体都是使用rails风格的参数处理(qs)来解析的,而不是使用低级的querystring库。为了用qs解析重复的参数,参数需要有括号:name[]=val1&name[]=val2。它还支持嵌套映射。除了解析HTML表单提交外,bodyParser还可以自动解析JSON请求。
编辑:我仔细阅读了Express. js,并修改了我的答案,使其对Express的用户来说更自然。
给定某种形式:
<form action='/somepath' method='post'>
<input type='text' name='name'></input>
</form>
使用快递
app.post('/somepath', function(req, res) {
console.log(JSON.stringify(req.body));
console.log('req.body.name', req.body['name']);
});
输出:
{"name":"x","description":"x"}
req.param.name x