В настоящее время я работаю над проектом, основанным на MEAN, и я подключаю часть mongo + node к AngularJS. Я использую Mongoose для схем, что очень удобно, но я встречаю странное поведение с вложенными схемами. Я создаю документ в AngularJS, который я отправляю в часть Node.js с запросом $ http.post. При его получении логика сервера использует функцию Model.create Mongoose для вставки ее в коллекцию. Он успешно выполняет, но функции create не хватает частей документа и заменяет некоторые вложенные объекты на Booleans.
Вот вывод Node.js при получении документа:
{ title: 'First Try',
branch: 2,
app: { name: 'Agirc Arrco' },
time:
{ periodNumber: 26,
periodDisplay: '27/06/2016',
submitDate: 1467304996377 },
author: { name: 'Doe', surname: 'John', id: 0 },
meta:
{ read: false,
priority: 3,
color: 'light-green',
type: true,
id: 6,
gathered: false },
elements:
[ { title: 'Sample',
description: 'Sample',
priority: 3,
app: [Object],
color: 'light-green',
type: 1,
id: 0 } ],
holidayData:
{ start: '30/06/2016',
startDisplay: '30/06/2016',
end: '',
endDisplay: '' },
comments: '',
rights:
{ editable: { level: false, branch: false, people: [Object] },
restriction: { level: false, branch: false, people: [Object] } } }
Вот результат после того, как документ был вставлен в коллекцию:
{ __v: 0,
title: 'First Try',
meta: true,
comments: '',
_id: 57754c24b322186ef2ace2c0,
author: { name: 'Doe', surname: 'John', id: 0 },
rights:
{ restriction: { level: false, branch: false, people: [Object] },
editable: { level: false, branch: false, people: [Object] } },
elements: [ true ],
time:
{ periodNumber: 26,
periodDisplay: '27/06/2016',
submitDate: 1467304996377 },
app: { name: 'Agirc Arrco' } }
Вот схема Mongoose:
var Report = mongoose.model('Report',{
title : String,
app : {name : String, id : Number},
time : {periodNumber : Number, periodDisplay : String, submitDate : Number},
meta : {
read : Boolean,
priority : Number,
color : String,
type : Boolean,
id : Number
},
elements : [{
title : String,
description : String,
type : Number,
priority : Number,
color : String,
app : {name : String, id : Number}
}],
rights : {
editable : {
level : Boolean,
branch : Boolean,
people : [{id : Number, bool : Boolean}]
},
restriction : {
level : Boolean,
branch : Boolean,
people : [{id : Number, bool : Boolean}]
}
},
comments : String,
author : {name : String, surname : String, id : Number}
});
И логика на стороне сервера:
app.post('/api/reports',function(req,res){
var report = req.body;
console.log(report);
Report.create(report, function(err,report){
if(err) res.send(err);
console.log('Created:');
console.log(report);
console.log('Error? ');
console.log(err);
//Reload reports
Report.find(function(err,reports){
if(err) res.send(err);
res.json(reports);
});
});
});
Ошибка Mongoose не возникает, так как я получаю "нулевой" вывод при отображении переменной err. Любой ключ к этой проблеме был бы оценен, я не нашел ни одного случая, который бы соответствовал этому...
Спасибо!
Нельзя использовать ключевые слова Mongoose в качестве свойств полей в схеме. meta: { read: Boolean, priority: Number, color: String, type: Boolean, id: Number },
Например, "type" указывает тип поля в Mongoose, поэтому из вышеприведенного фрагмента mongoose предполагает, что поле "meta" является логическим, потому что вы указали его "тип". Просто переименуйте 'type' в другое.
Кроме того, у вас нет "ветки" и "holidayData" в вашей схеме.