Я пытался сделать запрос на получение, который вернет все объекты в моем вложенном объекте в My userSchema. при создании маршрута я беру пользователя по идентификатору, а затем пытаюсь получить доступ к свойству classwork внутри него, которое является вложенным объектом, содержащим массив объектов classwork, которые имеют свои собственные свойства. Как я могу сделать запрос GET для отображения JSON только для работы пользователя?

Модель

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: [ClassworkSchema],
    outcomes: [OutcomesSchema],
    meetups: [MeetupSchema],
  });



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

GET запрос

  classworkRouter.get('/:userId/classwork', (req, res) => {
        User.findById(req.params.userId).populate('classwork').exec((err, data) => {
          if (err || !data) {
            res.status(404).json({error: 'user not found'});
          } else {
            res.json({data});
          }
        });
      });

-1
Wadaygo 14 Янв 2021 в 11:55

2 ответа

Лучший ответ

Вы можете следовать этому коду

  classworkRouter.get('/:userId/classwork', (req, res) => {
        User.findById(req.params.userId).populate('classwork' ,'classwork').exec((err, data) => {
          if (err || !data) {
            res.status(404).json({error: 'user not found'});
          } else {
            res.json({data});
          }
        });
      });

Ознакомьтесь с документацией

0
Mohammad Yaser Ahmadi 14 Янв 2021 в 10:01

Это будет работать

classworkRouter.get('/:userId/classwork', (req, res) => {
  User.findById(req.params.userId).populate('classwork').exec((err, data) => {
    if (err || !data) {
      res.status(404).json({ error: 'user not found' });
    } else {
      res.json({ data: user.classwork });
    }
  });
});

И это тот же код, но мой стиль немного изменился

classworkRouter.get('/:userId/classwork', async (req, res) => {
  try {
    const user = await User.findById(req.params.userId).populate('classwork')
    if (!user) throw
    return res.status(200).json({ data: user.classwork })
  } catch (err) {
    res.status(404).json({ error: 'user not found' });
  }
})
0
Jun 14 Янв 2021 в 11:03
65715994