我正在尝试使用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
- 我在这里尝试发布newArray
和json
。两者都会导致相同的数据发布到我的数据库,但对控制器文件中的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: 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上,但不会在我的应用中发布:
答案 0 :(得分:3)
尝试在您的ajax请求中设置contentType: 'application/json'
并字符串化您的数据,如JSON.stringify(newArray)
。这应该可以确保您发送的数据正常。
看起来您发送了多次转移,但之后尝试从所有数据(request.body
)创建一次转移?您需要循环遍历它们并单独创建它们。像这样:
request.body.forEach(function(obj) {
var transfer = new Transfer(obj);
transfer.save();
});