【问题标题】:Posting an array of objects to MongoDB with Node sends empty array使用 Node 将对象数组发布到 MongoDB 发送空数组
【发布时间】:2021-08-17 18:01:39
【问题描述】:

我正在尝试使用 NodeJS 将一组对象发布到我的 MongoDB 数据库。当我发布时,我的所有字段都显示为空。我把我的代码放在下面,并在下面解释每个console.logs 的输出。任何想法如何解决这个问题?

型号

var mongoose = require('mongoose');

var TransferSchema = new mongoose.Schema({
    uploadDate: Date,
    period: Number,
    transferCode: String,
    voucherNumber: String,
    vendor: String,
    description: String,
    amount: Number
        });

//convert schema to model
var Transfer = mongoose.model('Transfer', TransferSchema); 

//export model for use elsewhere in app
module.exports = Transfer; 

AJAX - 在这里我尝试发布newArrayjson。两者都导致发布到我的数据库中的相同数据,但对控制器文件中的console.logs 有不同的影响。

console.log(newArray);
json = JSON.stringify(newArray);
console.log(json);

$.ajax({
    url: "http://localhost:3000/transfers/api",
    type: "POST",
    data: newArray,
    datatype: 'json',
    success: function(data, textStatus, jqXHR) {
        console.log('posted!');
     },
     error: function(data, textStatus, errorThrown) {
        console.log('failed');
     }
})

transferController.js - 发布newArray 时,我得到以下信息: body: [object Object], Body: {"undefined": ["", "", "", etc], Text: undefined, Done: undefined

-当发布json 时,我得到以下信息: body: [object Object], Body: {"{\"period\":5,\"uploadDate\":2015-11-19T21:00:00.000Z\",\"transferCode\":\"1041\",\"vendor\":\"Lakes State\",\"voucherNumber\":\"0000047571\",\"description\":\"1003-1555 Sal Tax Adj Gran Sep \",\"amount\":456802}..., Text: undefined, Done: undefined

//Create a new transfer
function createTransfer(request, response) {
    console.log('posting');
    console.log('body: ' + request.body);                       //TEST
  console.info("Body: " + JSON.stringify(request.body));        //TEST
  console.info("Text: " + JSON.stringify(request.body.text));   //TEST
  console.info("Done: " + JSON.stringify(request.body.done));   //TEST 

    var transfer = new Transfer(request.body);
  transfer.save(function(error) {
    // console.log('transfer and transfer: ' + transfer);

        if(error) return response.json({ message: 'could not create transfer because ' + error });
    response.json({ transfer: transfer });
  });
}

编辑:

我尝试使用 Insomnia 来测试我发送的内容。奇怪的是,下面的截图发布在 Insomnia 上,但没有发布在我的应用程序中:

另外有趣的是,如果我使用 Insomnia 在一个数组中发布多个对象,它就不起作用,如下所示:

【问题讨论】:

    标签: javascript json ajax node.js mongodb


    【解决方案1】:

    尝试在您的 ajax 请求中设置 contentType: 'application/json' 并像 JSON.stringify(newArray) 那样字符串化您的数据。这应该确保您发送的数据正常。

    您似乎发送了许多传输,但随后尝试从所有数据中创建一个传输 (request.body)?您需要遍历它们并单独创建它们。像这样的:

    request.body.forEach(function(obj) {
      var transfer = new Transfer(obj);
      transfer.save();
    });
    

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2020-07-19
      • 2018-09-11
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2019-10-17
      • 2020-11-08
      • 2021-03-14
      相关资源
      最近更新 更多