#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? Я не знаком с этим использованием.