我有一个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"
,如另一个答案所示。再一次,它没有用。
感谢任何帮助。
答案 0 :(得分:0)
好的,所以经过一些游戏后我发现了:我之前使用过querystring.stringify()
,在将其更改为JSON.stringify()
后,它对我来说非常适合。