Bonjour !
Je suis en train de me mettre pour de bon à NodeJS, mais je rencontre mon premier problème.
J’utilise Mongoose, et j’ai ces deux modèles qui sont chacun dans un fichier :
models/Post.js :
const mongoose = require('mongoose');
const Comment = require('./Comment');
const postSchema = mongoose.Schema({
title: { type: String, required: true },
body: { type: String, required: true },
image: { type: String },
createdAt: { type: Date, default: Date.now() },
updatedAt: { type: Date },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
postSchema.post('findOneAndDelete', async post => {
const postId = post._id;
await Comment.find({
post: postId
}).then(comments => {
comments.forEach(async comment => {
await comment.delete();
})
});
});
module.exports = mongoose.model('Post', postSchema);
models/Comment.js :
const mongoose = require('mongoose');
const User = require('./User');
const Post = require('./Post');
const commentSchema = mongoose.Schema({
author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' },
body: { type: String, required: true }
});
commentSchema.post('remove', async comment => {
const commentId = comment._id;
await User.updateMany({
comments: {
$in: [commentId]
}
}, {
$pull: {
comments: commentId
}
});
await Post.updateMany({
comments: {
$in: [commentId]
}
}, {
$pull: {
comments: commentId
}
});
});
commentSchema.post('findOneAndDelete', async comment => {
const commentId = comment._id;
await User.updateMany({
comments: {
$in: [commentId]
}
}, {
$pull: {
comments: commentId
}
});
await Post.updateMany({
comments: {
$in: [commentId]
}
}, {
$pull: {
comments: commentId
}
});
});
module.exports = mongoose.model('Comment', commentSchema);
Alors déjà, j’ai plusieurs soucis. Mais pour le moment, je vais me concentrer sur le plus important : Ce code ne fonctionne pas.
J’ai une erreur ligne 49 du fichier models/Comment.js qui me dit que la fonction updateMany
n’est pas définie.
En faisant quelques recherches, je me suis rendu compte que l’erreur était là parce que Comment.js require Post.js, et que Post.js require Comment.js. Bref, les deux s’inclue l’un l’autre, ce qui provoque cette erreur (et effectivement, si je retire le require('./Comment.js');
du fichier models/Comment.js, tout fonctionne).
Comment est-ce que je pourrais faire pour garder mes deux modèles dans leurs propre fichier, mais ne pas avoir cette inclusion mutuelle ?
Merci !