我尝试使用 body-parser 但它似乎不起作用

I tried using body-parser but it seems like it is not working

我在 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

这是在控制台中打印的:

服务器已启动 {}

您正在将 postname 请求重定向到 /,请注意,这不会将 request data 转发到 / 根路由。

res.redirect("/") 将以 302 状态向客户端发送响应,然后客户端将向 / 路由发出 Get 请求,但没有任何数据。因此 request.bodyGet 请求中总是有空数据。

您可以处理 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");
});