جافاسكريبت - خطأ التحقق من صحة موندب
أنا أواجه هذه المشكلة الغريبة التي تعطيني ValidationError لمخطط معين. أنا لست متأكدًا حقًا من سبب حدوث الانهيار نظرًا لأن أنواع الكائنات تبدو لي جيدة تمامًا.
// works fine but the Data in ObservationsObject is LOST
var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations);
var LearningCenterObject = LearningCenter.LearningCenterModel(timeTable.learningCenter);
LearningCenterObject.observations = ObservationsObject;
// GIVES VALID ERROR UPON LEARNINGCENTER.SAVE()
var LearningCenterObject = LearningCenter.LearningCenterModel(timeTable.learningCenter);
for (var i = 0; i < timeTable.learningCenter.observations.length; i++) {
var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations[i]);
LearningCenterObject.observations.push(ObservationsObject);
}
حفظ الشيفرة:
LearningCenterObject.save(function (err, learningCenterSavedObject) {
if (err) {
console.error("TimeTableController->LearningCenterObject->save()", err);
return;
}
console.log("TimeTableController->LearningCenterObject->save() SUCCESS");
ObservationsObject.save(function (err, observationSavedObject) {
if (err) {
console.error("TimeTableController->LearningCenterObject->Observations->save()", err);
return;
}
console.log("TimeTableController->LearningCenterObject->Observations->save() SUCCESS");
});
});
المخططات:
learningCenterSchema = new mongoose.Schema({
name : String,
observations: [{type: Schema.Types.ObjectId, ref: "observations_model"}]
});
observationsSchema = new mongoose.Schema({
obsNum : String,
data: {ageGroup : String, category: String, description: String, tips: String}
});
خطأ:
TimeTableController->LearningCenterObject->save() { [ValidationError: learning_center_model validation failed]
message: 'learning_center_model validation failed',
name: 'ValidationError',
errors:
{ observations:
{ [CastError: Cast to Array failed for value "[object Object]" at path "observations"]
message: 'Cast to Array failed for value "[object Object]" at path "observations"',
name: 'CastError',
kind: 'Array',
value: [Object],
path: 'observations',
reason: [Object] } } }
مثال على JSON:
"learningCenter": {
"name": "asdf",
"observations": [
{
"obsNum": "1.1111",
"data": {
"ageGroup": "sadf",
"category": "df",
"description": "adf",
"tips": "asdf"
}
}
]
}
الإجابة رقم 1
الخطأ غامض نوعاً ما وغير واضح للمبتدئ. بكلمات بسيطة، الخطأ يقول
أنت تقوم بتعيين كائن وهو مصفوفة من OBJECT OBJECT إلى كائن يمكنه قبول مرجع لكائن يحتوي على OBJECTID فقط.
على الرغم من أن الكائن الذي كنت أدفعه في المصفوفة كان {object, object} (لست متأكدًا لماذا تقول Mongoose إنه [Object object]، ربما يمكن لشخص أكثر خبرة أن يساعدني في فهم ذلك) إلى كائن هو مصفوفة من معرفات الكائنات، إلا أن التحقق من صحة mongoose فشل.
لحل هذا، قمت بإنشاء مصفوفة. دفعت معرفات كائنات ObservationModel في تلك المصفوفة وعيّنت تلك المصفوفة إلى LearningCenter.observations.
var myArray = new Array();
var LearningCenterObject = LearningCenter.LearningCenterModel(timeTable.learningCenter);
for (var i = 0; i < timeTable.learningCenter.observations.length; i++) {
var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations[i]);
myArray.push(ObservationsObject);
}
LearningCenterObject.observations = myArray;
الإجابة رقم 2
واجهت نفس المشكلة عند محاولة تحديث النماذج التي لم يكن بها أي شيء في المصفوفة. فقمت ببساطة بتهيئتها كمصفوفة فارغة إذا لم يكن هناك شيء في المصفوفة.
if (contact.group && contact.group.length > 0){
for (let groupContact of contact.group) {
groupContact = groupContact._id;
}
} else {
contact.group = [];
}
الاتصال.حفظ...
