我试图投票投票应用。 我的大问题是我无法创建一个对象数组并访问它们。我尝试对这样的民意调查进行一些选择投票:
title:"question?"
option:content:"1 answer",vote:0
content:"2 answer",vote:0
content:"3 answer",vote:...
并构建类似的模式:
var mongoose = require("mongoose");
var pollSchema = new mongoose.Schema({
title: String,
maker :{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String
},
options:[{content: String,vote:{type:Number,default:0}}]
});
module.exports = mongoose.model("Poll",pollSchema);
从那里获取数据:
<div class="form-group" id="option">
<label for="Option 1">Options</label>
<input type="text" class="form-control" name="options[content]" placeholder="Option 1">
<input type="text" class="form-control" name="options[content]" placeholder="Option 2">
</div>
并且mongoDB中的输出是:
{
"_id": {
"$oid": "5993030dc5fa8c1b4f7eb176"
},
"title": "Some question?",
"options": [
{
"content": "opt 1,opt 2",
"_id": {
"$oid": "5993030dc5fa8c1b4f7eb177"
},
"vote": 0
}
],
"maker": {
"username": "Naor Malca"
},
"__v": 0
}
我希望每个选项都有单独的content
,id
和vote
。
也许我输入数据符号?或者模式是worng?
更新: 这是我的路线代码:
//NEW POLL ROUTE
app.post("/",function(req, res){
var title = req.body.title;
var options = req.body.options;
var maker = req.body.maker;
var newPoll = {title:title,options:options,maker:maker};
Poll.create(newPoll,function(err,poll){
if(err){
res.send("create error");
} else{
res.redirect("/");
}
});
});
仍然没有使用输出:(它使文本成为一个数组而不是一个对象数组......)
{ _id: 5993fcad9a63350df274b3e5,
title: '111',
__v: 0,
options: [ { text: '222,333', _id: 5993fcad9a63350df274b3e6, vote: '0' } ],
maker: { username: 'naor' } }
答案 0 :(得分:1)
构建表单时,添加[number]
以使每个选项都不同。
<div class="form-group" id="option">
<label for="Option 1">Options</label>
<input type="text" class="form-control" name="options[0][content]" placeholder="Option 1" value="value1">
<input type="text" class="form-control" name="options[1][content]" placeholder="Option 2" value="value2">
</div>
当你提交表单时,它应该作为对象数组返回
req.body.options = [
{ content: 'value1' },
{ content: 'value2' }
]
这是构建包含分组元素的“添加”表单时的典型方法。
-
当涉及“编辑”表单以便您想要更新现有选项时,您可以传递选项_id
以下是使用EJS
的示例<div class="form-group" id="option">
<label for="Option 1">Options</label>
<% poll.options.forEach(option => { %>
<input type="text" class="form-control" name="options[<%= option._id %>][content]" placeholder="Option 1" value="<%= option.content %>">
<% }) %>
</div>
此处req.body.options
应为对象
req.body.options = {
'some-id': {
content: 'value1'
},
'another-id': {
content: 'value2'
}
}
保存时,您将使用键_id
迭代对象。我想你可以利用id()找到要设置的对象。
-
如果它没有以上述格式返回,您很可能需要使用并设置bodyParser。