Я изучаю стек MERN и столкнулся с проблемой на маршруте редактирования моего дочернего маршрутизатора.
У меня есть следующие схемы моделей в songs.js
и students.js
файлах:
const mongoose = require('mongoose');
const studentSchema = mongoose.Schema({
name: { type: String, required: true },
instrument: String,
songs: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Song'
}]
});
const Student = mongoose.model('Student', studentSchema);
module.exports = Student;
const mongoose = require('mongoose');
const songSchema = mongoose.Schema({
name: { type: String, required: true },
img: String
})
const Song = mongoose.model('Song', songSchema);
module.exports = Song
И у меня есть файлы songs.js
и students.js
для моих роутеров, а для mergeParams установлено значение true для роутера моих песен const songs = express.Router({ mergeParams: true });
. Я присоединяю его к роутеру студентов следующим образом:
students.use('/:id/songs', songs);
например, мои параметры URL становятся students/student1/songs/song1
Все остальные мои маршруты работают, но на маршруте обновленияроутер моих песен Я получаю сообщение об ошибке «Ошибка типа: Student.findById не является функцией», когда я перенаправляю обратно в индексный просмотр песни. Мои маршруты редактирования и обновления приведены ниже:
songs.get('/:songId/edit', async (req, res) => {
try {
const findSong = Song.findById(req.params.songId);
const findStudent = Student.findById = (req.params.id);
const [foundSong, foundStudent] = await Promise.all([findSong, findStudent]);
res.render('songs/edit', {
student: foundStudent,
song: foundSong
})
} catch (err) {
console.log(err);
}
});
songs.put('/:songId', async (req, res) => {
try {
const updateSong = await Song.findByIdAndUpdate(req.params.songId, req.body, { new: true });
res.redirect('/students/' + req.params.id + '/songs');
} catch (err) {
console.log(err);
}
});
Я не уверен, что является причиной ошибки здесь, мой маршрут удаления настроен аналогично и работает. Буду признателен за любые предложения.