При выполнении POST-запроса для вложенного документа он возвращается как неопределенный? мангуст, экспресс

#node.js #express #http #post #mongoose

#node.js #экспресс #http #Публикация #mongoose

Вопрос:

Я пытаюсь сделать post-запрос для сохранения новых данных в одном из моих вложенных документов, но я получаю сообщение об ошибке при попытке получить доступ к вложенному документу в функции. Он продолжает возвращаться как неопределенный. Как я могу получить конкретного пользователя по идентификатору и создать и добавить новые данные, которые являются вложенными документами?

Модель

 const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const ClassworkSchema = new Schema({
    name: String,
    time: Date,
    todo: String,
    isDone: false
});

const OutcomesSchema = new Schema({
    name: String,
    time: Date,
    todo: String, 
    isDone: false,
    isApproved: false
})

const MeetupSchema = new Schema({
    name: String,
    time: Date,
    location: String,
    attended: false
})
const UserSchema = new Schema({
    name: {
      type: String,
      required: true
    },
    email: {
      type: String,
      required: true
    },
    password: {
      type: String,
      required: true
    },
    date: {
      type: Date,
      default: Date.now
    },
    classwork:{type: [ClassworkSchema], default: []},
    outcomes: [OutcomesSchema],
    meetups: [MeetupSchema],
  });



module.exports = User = mongoose.model('users', UserSchema);
 

контроллер

   classworkRouter.post("/:userId/", (req, res) => {
  User.findById(req.params.user_id, (err, user) => {
    if (err) return err;

    new_classwork = new classwork();
    (new_classwork.name = req.body.name),
      (new_classwork.date = req.body.date),
      (new_classwork.todo = req.body.todo),
      (new_classwork.isDone = req.body.isDone);
    console.log(new_classwork);

    user.classwork = {};
    user.classwork.name = req.body.classwork.name;
    user.classwork.todo = user.classwork.todo;

    if (user.classwork === undefined) {
      user.classwork.push(new_classwork);
    } else {
      user.classwork = [new_classwork];
    }

    user.save(function (err, data) {
      if (err) res.send(err);

      res.json({ message: "work added", data: data });
    });
  });
});
 

вы можете увидеть ошибку в терминале в следующем phto:

введите описание изображения здесь

Комментарии:

1. если ваша проблема решена, примите мой ответ или она не решена, оставьте комментарий

2. Он изменил ошибку на TypeError, теперь в нем говорится: «Невозможно установить для свойства ‘classwork’ значение null».

Ответ №1:

в этой части кода

 new_classwork = new classwork()
 

вы должны определить new_classwrok следующим образом :

 let new_classwork = new classwork()
 

и new classwork() не определено, вы должны потребовать модель classwork в контроллере..

в файле схемы экспортируются схемы, подобные этой :

 const User = mongoose.model('users', UserSchema);
const Classwork = mongoose.model('Classwork', ClassworkSchema );

module.exports = {
  User : User ,
  Classwork : Classwork 
}
 

в controller.js

 const {User} = require('../models/certification');
const {Classwork } = require('../models/certification');
 

после того, как требуются модели, которые вы можете использовать new Crosswork следующим образом :

примечание: Класс с заглавным символом

 let new_classwork = new Classwork()
 

Комментарии:

1. Я исправил это, но я все еще получаю ту же ошибку

2. какая строка является строкой 85?

3. обновил мой ответ, вы должны потребовать classwork, после чего вы можете использовать new classwork ()

4. где я должен использовать require? Я не знаком с этим использованием.