#javascript #express #mongoose #get #postman
#javascript #экспресс #mongoose #получить #почтальон
Вопрос:
Я пытался сделать запрос get, который вернет все объекты в моем вложенном объекте в моей пользовательской схеме. при создании маршрута я получаю пользователя по идентификатору, а затем пытаюсь получить доступ к свойству 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. У вас возникли трудности с проверкой ответа, который вы получаете на запрос get, используя Postman?
2. если вы хотите отправлять только выбранные данные пользователю, вы можете использовать . выберите (‘fieldName’) после заполнения
3. Post man возвращает всю информацию о пользователе, но мне просто нужен массив объектов classwork, а не вся информация о пользователе.
Ответ №1:
вы можете, следуя этому коду
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});
}
});
});
пожалуйста, ознакомьтесь с документацией
Ответ №2:
это было бы работой
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' });
}
})