从POST请求中解析req.body

时间:2018-04-05 17:03:18

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

我使用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时,我得到了未定义,因为很明显.name将引用实际的字符串。所以我在从请求体中获取第一个元素时遇到问题,因为每个按钮的名称都是动态创建的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

这不会起作用吗?

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

实际上我是新手,如果这是错误的话就会忽视我。