【问题标题】:POSTING an array of objects to node.js/save to database using mongoose使用 mongoose 将对象数组发布到 node.js/save 到数据库
【发布时间】: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


    【解决方案1】:

    好的,所以在玩了一些之后我想通了:我之前使用了querystring.stringify(),在将其更改为JSON.stringify() 之后它对我来说非常有效。

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2017-01-16
      • 2018-01-07
      • 2019-04-23
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2019-10-17
      相关资源
      最近更新 更多