这是我的简单表单:
<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中的文档)。
从Express 4.16.0开始,事情再次发生了变化,你现在可以像在Express 3.0中一样使用Express .json()和Express .urlencoded()。
从Express 4.0到4.15,这是不同的:
$ npm install --save body-parser
然后:
var bodyParser = require('body-parser')
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
剩下的就像Express 3.0一样:
首先,您需要添加一些中间件来解析主体的post数据。
添加以下一行或两行代码:
app.use(express.json()); // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies
然后,在处理程序中使用req。体对象:
// assuming POST: name=foo&color=red <-- URL encoding
//
// or POST: {"name":"foo","color":"red"} <-- JSON encoding
app.post('/test-page', function(req, res) {
var name = req.body.name,
color = req.body.color;
// ...
});
注意,不建议使用express.bodyParser()。
app.use(express.bodyParser());
…等价于:
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());
express.multipart()存在安全问题,因此最好显式地添加对所需的特定编码类型的支持。如果你确实需要多部分编码(例如支持上传文件),那么你应该阅读这篇文章。
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get('/',function(req,res){
res.sendfile("index.html");
});
app.post('/login',function(req,res){
var user_name=req.body.user;
var password=req.body.password;
console.log("User name = "+user_name+", password is "+password);
res.end("yes");
});
app.listen(3000,function(){
console.log("Started on PORT 3000");
})
如果你想在没有中间件的情况下构建已发布的查询,这可以做到:
app.post("/register/",function(req,res){
var bodyStr = '';
req.on("data",function(chunk){
bodyStr += chunk.toString();
});
req.on("end",function(){
res.send(bodyStr);
});
});
这将把这个发送到浏览器
email=emailval&password1=pass1val&password2=pass2val
使用中间件可能更好,这样你就不必在每条路由中一遍又一遍地写这个。