我使用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将引用实际的字符串。所以我在从请求体中获取第一个元素时遇到问题,因为每个按钮的名称都是动态创建的。任何帮助将不胜感激。
答案 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);
});
实际上我是新手,如果这是错误的话就会忽视我。