我将主体解析器与express一起使用,但无法正常工作,并且在控制台中打印req.body时返回空对象。
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));
app.set('view engine','ejs');
app.get('/' ,function(req,res){
var name = "ganesh"
console.log(req.body.name);
res.render('home',{name : name});
});
app.post('/postname' , function(req,res){
res.redirect("/");
});
app.listen(3000,function(){
console.log("server started");
};
这是我的home.ejs文件
<html>
<head>
<title>practice</title>
</head>
<body>
<h1>
hello<%= name %> This is the home page
</h1>
<form action="/postname" method = "POST">
<input type = "text" name="name">
<button>
go
</button>
</form>
</body>
我已经正确安装了body-parser ejs和express
这打印在控制台中:
服务器已启动 {}
答案 0 :(得分:1)
您正在将postname
请求重定向到/
,请注意,这不会将request data
转发到/
根路由。
res.redirect("/")
会将状态为302
的响应发送回客户端,然后客户端将向Get
路由发出/
请求,而没有任何数据。因此request.body
请求中的Get
总是有空数据。
您可以处理postname
路由中的数据,然后将其重定向。
如果您想将数据从postname
转发到/
路由,则可以在query string
中传递它。
示例:
var app = express();
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.set('view engine', 'ejs');
app.get('/', function (req, res) {
var name = "ganesh"
res.render('home', { name: req.query.name });
});
app.post('/postname', function (req, res) {
var name = "ganesh"
console.log(req.body.name);
// handle the post data here
res.redirect("/?name=" + req.body.name);
});
app.listen(3000, function () {
console.log("server started");
});