Я пытался сделать запрос на получение, который вернет все объекты в моем вложенном объекте в 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});
}
});
});
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});
}
});
});
Ознакомьтесь с документацией
Это будет работать
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' });
}
})
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.