f1n*_*1nn 10 forms arrays node.js express
假设我必须在同一页面上编辑一批相同类型的对象:
//-jade
form(action='', method='POST')
for each message_id in messages_ids
input(type='text', name='message', id='#{message_id}')
input(type='text', name='author', id='#{message_id}')
input(type='submit', value='Send')
Run Code Online (Sandbox Code Playgroud)
我知道我不能在后端处理这种形式'因为它的原因 - 它不会被发送到后端.但是,有办法吗?我想在后端得到这样的东西:
//js
for (var i = 0; i <= req.body.message.length; i++) {
console.log (
'ObjectID: ' + req.body.message[i].id, //-? null, just to show what I'm trying to get
'Message: ' + req.body.message[i],
'Author: ' + req.body.author[i]
);
}
Run Code Online (Sandbox Code Playgroud)
这是伪代码(它不会工作).那么,有什么想法吗?
PS我在没有AJAX的情况下如何做到这一点
Sal*_*Sal 24
因为bodyParser.urlencoded,如果将extended选项设置为,则中间件将true格式的属性名称property[nestedProperty]解释bodyParser为:
{ property: nestedPropert: $value }
Run Code Online (Sandbox Code Playgroud)
请务必初始化中间件,如下所示:
app.use(bodyParser.urlencoded({ extended: true });
Run Code Online (Sandbox Code Playgroud)
然后,更改上面的表单声明以使message属性成为对象,而不是字符串值,如下所示:
form(action='', method='POST')
- for (var i = 0; i < messages_ids.length; i++)
- var message_id = messages_ids[i]
//- so we're treating each index like a property of `message`
input(type='text', name='messages[#{i}][message]')
input(type='text', name='messages[{#{i}}][author]')
input(type='hidden', name='messages[#{i}][id]', value='#{message_id}')
input(type='submit', value='Send')
Run Code Online (Sandbox Code Playgroud)
然后,在服务器端,request.body.messages将是一个对象,看起来像:
{
"messages": {
"1": {
"message": $message1,
"author": $author1,
"id": $id1
},
"2": {
"message": $message2,
"author": $author2,
"id": $id2
} /* , ... */
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以轻松转换request.body.messages为数组:
var messages = Array.prototype.slice.call(request.body.messages);
Run Code Online (Sandbox Code Playgroud)
现在,你应该可以像这样访问每个元素(注意:我更喜欢功能样式,但我会保持与你的一致):
for (var i = 0; i < messages.length; i++) {
console.log({
'ObjectId' + messages[i].id,
'Message' + messages[i].message,
'Author' + messages[i].author
});
}
Run Code Online (Sandbox Code Playgroud)
PS:如果你想知道一种功能风格,那么它是:
messages.forEach(function (message) {
console.log(
'ObjectId' + message.id,
'Message' + message.message,
'Author' + messages.author
);
});
Run Code Online (Sandbox Code Playgroud)
编辑:特别感谢@eye_mew指出我们需要设置extended为true.
| 归档时间: |
|
| 查看次数: |
9342 次 |
| 最近记录: |