代码之家  ›  专栏  ›  技术社区  ›  Shooting Stars

正在分析请求。POST请求的正文

  •  1
  • Shooting Stars  · 技术社区  · 6 年前

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

    这就是按钮的创建方式

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

    这就是我发布到服务器时所做的

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

    当我收到请求时。body它会返回正确的信息(“this.id”的按钮名和“first name and last name”的按钮值)。语法如下:

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

    所以我得到了主体,问题是我不知道如何解析以只获得ID。当我尝试执行req时。身体我的名字没有定义,因为很明显。名称将引用实际字符串。因此,我在从请求正文中获取第一个元素时遇到了一个问题,因为每个按钮的名称都是动态创建的。任何帮助都将不胜感激。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Randy Casburn    6 年前

    使用 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);
    }
    
        2
  •  0
  •   Shooting Stars    6 年前

    顺便说一句,兰迪的答案是正确的。在我的情况下,我想获得密钥,但密钥[0]将返回Tom Bradstreet 1的整数。我要做的是,

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

    如果您使用控制台。记录(键)它将为您提供一个不可用的数组。就我而言,我得到了[“1”]。所以我必须使用toString()将其转换为1。我不确定toString()在这种情况下到底有多安全,但这就是我如何进入可用性状态的原因。

        3
  •  0
  •   dilanSachi    6 年前

    这不管用吗?

    <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);
    });
    

    事实上,我对这些都是新手,如果这是错误的,就忽略我。