【问题标题】:I tried using body-parser but it seems like it is not working我尝试使用 body-parser 但它似乎不起作用
【发布时间】:2020-06-28 08:20:15
【问题描述】:

我正在使用带有 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

这是打印在控制台中的:

服务器已启动 {}

【问题讨论】:

  • 我相信 redirect 告诉 客户端 进行重定向 (expressjs.com/en/api.html#res.redirect)。 IE。客户端向您的服务器发出带有数据的 POST 请求。服务器告诉客户端“向 / 发出 GET 请求”。客户端向 / 发出没有数据的 GET 请求。为什么不将console.log(req.body.name); 放在/postname 路由中,因为这是您的数据发送到的地方,并确保它有效?然后你就可以弄清楚如何处理重定向了。
  • 是的,我明白了,非常感谢☺

标签: javascript express body-parser


【解决方案1】:

您正在将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");
});

【讨论】:

  • 那么 req.query.name 是否具有 /?name = + req.body.name 中传递的值,然后传递到 home.ejs 文件中???
  • 是的,它会将此值作为查询字符串传递,然后您可以在根路由中检索它
  • 是的......非常感谢......我会在一段时间后尝试告诉你它是否有效......☺
猜你喜欢
  • 2016-05-31
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多