【问题标题】:Parsing the req.body from a POST request从 POST 请求中解析 req.body
【发布时间】:2018-04-05 17:03:18
【问题描述】:

我使用 Node.js、Express、Body-parser 和 Handlebars 创建了一个应用程序。我目前处于一种假设情况,我根据数据库中的 x 个条目动态创建了 x 个按钮。

这就是按钮的创建方式

<form method="POST" action="/favoriteCreator">
    <input type="submit" name="{{this.id}}" value="{{this.fname}} {{this.lname}}">
</form>

这就是我 POST 到服务器时所做的事情

app.post('/favoriteCreator', function(req, res) {
    var button = req.body;
    console.log(req.body);
});

当我得到 req.body 时,它会返回正确的信息(“this.id”的按钮名称,以及“名字和姓氏”的按钮值。语法是这样的:

{ '1': 'Tom Bradstreet' }
{ whatever id is: whatever firstname lastname is }

所以我正在获取正文,问题是我不知道如何解析以仅获取 ID。当我尝试做 req.body.name 我得到 undefined 因为很明显 .name 将指的是实际的字符串。所以我在从请求正文中取出第一个元素时遇到问题,因为每个按钮的名称都是动态创建的。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript node.js express handlebars.js body-parser


    【解决方案1】:

    使用 Object.keys(req.body); 或使用 for...of 如果只是迭代而不需要键。

    这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

    let keys = Object.keys(req.body);
    console.log(req.body[keys[0]]);
    

    或在这里: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

    for(let item of req.body){
       console.log(item);
    }
    

    【讨论】:

    • 嘿,谢谢你,我什至不知道 mozilla docs tbh。我正在寻找创建者 ID,所以我只是做了 console.log(keys) 而不是 req.body(keys[0]) 它给了我正确的输出。非常感谢。
    • 很高兴为您提供帮助。习惯上赞成并接受答案。我知道您没有资格投票,但请接受答案。谢谢!
    • 顺便说一句,我也赞成你的问题。它写得很好,并立即引导我找到答案。我们不会经常从新访问者那里看到这种情况 - 所以感谢您!
    【解决方案2】:

    顺便说一句,兰迪的回答是正确的。就我而言,我想获取密钥,但 key[0] 会返回 Tom Bradstreet 而不是 1。我必须做的是,

        app.post('/favoriteCreator', function(req, res) {
        var keys = Object.keys(req.body);
        console.log(keys.toString());
    });
    

    如果你执行 console.log(keys),它会给你一个不可用的数组。就我而言,我得到了 ['1']。所以我必须使用 toString() 将其转换为 1。我不确定在这种情况下 toString() 实际上有多安全,但这是我进入可用性状态的方式。

    【讨论】:

      【解决方案3】:

      这不行吗?

      <form method="POST" action="/favoriteCreator/{{this.id}}">
          <input type="submit" name="{{this.id}}" value="{{this.fname}} {{this.lname}}">
      </form>
      

      那么,

      app.post('/favoriteCreator/:id', function(req, res) {
          var button = req.body;
          console.log(req.params.id);
      });
      

      实际上我是这些新手,如果有问题,请忽略我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-06
        • 2021-03-28
        • 1970-01-01
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多