【发布时间】:2018-06-21 17:35:03
【问题描述】:
我有一个 ReactJS 表单,您可以在其中动态添加表单“部分”(带有表单输入的部分)。这是我所说的“部分”的一个例子:
<div>
<input placeholder="Author" />
<input placeholder="Age" />
<input placeholder="Amount of books written" />
</div>
类似的东西。您可以根据需要添加任意数量的这些 div。
我将这些输入的值保存在状态中,这给了我一个像这样的嵌套数组:
this.state = {
formdata : [
{author: "somebody", age: 34, books: 0},
{author: "somebody else", age: 100, books: 1}
]
}
现在我正在使用 axios post 通过 express 将数据发布到 node.js。这是我的帖子功能:
handleSubmit(e) {
axios.post('receivedata',
querystring.stringify({
formdata : this.state.formdata
}), {
headers : {"Content-Type": "application/x-www-form-urlencoded"}
}
)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
}
这是我使用的猫鼬模式:
var EntrySchema = new mongoose.Schema({
formdata: [{type:String}],
updated_at: {type: Date, default: Date.now}
});
这就是我(尝试)将数据发送到我的数据库的方式:
router.post("/", function(req, res) {
newEntry.formdata = req.body.formdata;
newEntry.save(function (err) {
if(err)
res.send(err);
res.send("Entry added successfully!");
});
});
这不起作用,当我检查数据库时,我收到一个带有空字符串的数组,如下所示:formdata:[{""}]
我认为问题在于模式的设置方式,因为当我执行console.log(this.state.formdata) 时,它会正确返回数据。我的下一个猜测是 axios 无法发送嵌套数组,但经过一些研究我发现情况并非如此,所以我假设有一种特殊的方法可以在 mongoose 模式中定义嵌套数组?我该怎么办?
编辑:我在想也许我可以按照以下方式做一些事情:
var EntrySchema = new mongoose.Schema({
formdata: [{
author: String,
age: Number,
books: Number
}],
updated_at: {type: Date, default: Date.now}
});
我试过了,它也不起作用。现在,我不知道我是否走在正确的轨道上或如何做到这一点。
我还尝试将标头中的 Content-Type 更改为 "application/ json",正如另一个答案中所建议的那样。再一次,它没有工作。
感谢任何帮助。
【问题讨论】:
标签: javascript arrays node.js mongodb mongoose