使用Node向MongoDB发布对象数组会发送空数组

时间:2016-01-14 10:43:43

标签: javascript json ajax node.js mongodb

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

MODEL

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.log有不同的影响。

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: undefinedDone: 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: undefinedDone: 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上,但不会在我的应用中发布: enter image description here

同样有趣的是,如果我使用Insomnia在数组中发布多个对象,它就不起作用,如下所示: enter image description here

1 个答案:

答案 0 :(得分:3)

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

看起来您发送了多次转移,但之后尝试从所有数据(request.body)创建一次转移?您需要循环遍历它们并单独创建它们。像这样:

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