2017-01-11 5 views
0

Я пытаюсь построить схему Mongoose, которая включает вложенный документ, поэтому у меня может быть один документ с информацией о пользователе и их контактами. Идея состоит в том, чтобы иметь возможности CRUD в поддоку Контакты, не требуя отдельной коллекции.Недокументированные схемы не работают

(Извините за констатирую очевидное, просто хочу быть ясно)

Так родительская схема является «Пользователь» и субтропических его «Контакты» ...

Я закодирован мою модель, как это:

var UserSchema = new Schema({ 
    login: { 
     type: String, 
     unique: true, 
     required: true 
    }, 
    password: { 
     type: String, 
     required: true 
    }, 
    email:{ 
     type: String, 
     required: true 
    }, 
    firstname:{ 
     type: String, 
     required: false 
    }, 
    lastname: { 
     type: String, 
     required: false 
    }, 
    contacts:[ContactSchema] 
}) 


var ContactSchema = new Schema({ 
    contactFirstName:{ 
     type: String, 
     required: true 
    }, 
    contactLastName:{ 
     type: String, 
     required: true 
    }, 
    contactEmail: { 
     type: String, 
     required: true 
    } 
}) 

Но когда я запускаю мой API, я получаю сообщение об ошибке с указанием:

TypeError: Недопустимое значение схемы массива пути contacts

Я довольно новичок в Mongoose, но из того, что я видел, вы реализуете поддокумент.

Может ли кто-нибудь увидеть, что мне не хватает?

Вот маршрут образца я хочу позвонить в моем экспрессе API:

router.route('/') 

//CREATE NEW USER 
.post(function(req, res){ 

    var user = new User(); 
    user.login = req.body.login; 
    user.firstname = req.body.firstname; 
    user.lastname = req.body.lastname; 
    user.email = req.body.email; 
    user.password = req.body.password; 

    user.contacts.contactFirstName = req.body.contacts.contactFirstName; 
    user.contacts.contactLastName = req.body.contacts.contactLastName; 

    user.save(function(err){ 
    if(err) 
     res.send(err); 
    res.json({message:'User has been created'}); 
    }) 

}) 

ответ

0

В последней версии Мангуста я не думаю, что [someSchema] необходимо. Вы можете просто положить someSchema. Таким образом, нет скобок массива. Если вы работаете с более старой версией, попробуйте использовать .add со схемой. Так что-то вроде этого.

var ContactSchema = new Schema(); ContactSchema.add({ contactFirstName:{ type : String, required: true }, contactLastName:{ type : String, required: true }, contactEmail: { type : String, required: true } })

Чем добавить свой contacts:[ContactSchema] к UserSchema

+0

Thanks @mrtaz. Я попытался просто удалить скобки и вызвать var сразу после (contacts: contactSchema) и получил ту же ошибку. Я использую мангуст 4.5.5. – cnak2

+0

Добавить схему контактов выше пользователя – mrtaz

0

Вы находитесь на правильном пути, только простую ошибку. Вы использовали ContactSchema в UserSchema, не определяя его, поэтому он подходит как неопределенный.

Определите свой ContactSchema перед определением UserSchema, а затем используйте его в массиве контактов. Он должен работать нормально.

var UserSchema = new Schema({ 
    //rest of the variables... 
    lastname: { 
     type: String, 
     required: false 
    }, 
    contacts:[ContactSchema] 
}) 


var ContactSchema = new Schema({ 
    contactFirstName:{ 
     type: String, 
     required: true 
    }, 
    //other variables... 
}); 

Update:

при создании нового user, вы не определяя user.contacts как object, вы сразу пытаетесь присвоить значение user.contacts.contactFirstName и user.contacts.contactLastName. Но, поскольку user.contact не определен, он приходит как undefined, и, следовательно, error: Невозможно прочитать свойство 'contactFirstName' of undefined.

Добавить user.contacts = {}; перед присвоением значения user.contacts.contactFirstName и user.contacts.contactLastName.

user.contacts = {};//add this line 
user.contacts.contactFirstName = req.body.contacts.contactFirstName; 
user.contacts.contactLastName = req.body.contacts.contactLastName; 
+0

Thanks Ravi! Каков наилучший способ проверить это в PostMan? – cnak2

+0

Спасибо Рави.Я переключил их, и я не получаю эту ошибку при запуске API. Тем не менее, когда я пытаюсь проверить в PostMan, я пытаюсь добавить одно из полей, используя ключ «contacts.contactFirstName», и я получаю неопределенное сообщение: «Ошибка»: «Невозможно прочитать свойство« contactFirstName »неопределенного» « – cnak2

+0

Что вы пытаетесь сделать с почтальоном, я имею в виду, какой маршрут вы тестируете? Можете ли вы опубликовать код маршрута, который вы тестируете. –

 Смежные вопросы

  • Нет связанных вопросов^_^