使用mongoose将一个对象数组发送到node.js / save到数据库

时间:2018-01-12 09:28:16

标签: javascript arrays node.js mongodb mongoose

我有一个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",如另一个答案所示。再一次,它没有用。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

好的,所以经过一些游戏后我发现了:我之前使用过querystring.stringify(),在将其更改为JSON.stringify()后,它对我来说非常适合。