我尝试使用人体解析器,但似乎无法正常工作

时间:2020-03-17 09:07:44

标签: javascript express body-parser

我将主体解析器与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

这打印在控制台中:

服务器已启动 {}

1 个答案:

答案 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");
});