Je définis un schéma imbriqué mais lorsque j'envoie des données d'entrée ne renvoie rien,
comment puis-je résoudre ce problème?
voici mon résultat:
const userModels = require('../../models/userModels') router.post('/', (req , res, next) => { const user = new userModels({ _id : new mongoose.Types.ObjectId, eduLevel :req.body.eduLevel, eduField :req.body.eduField, eduInst :req.body.eduInst, eduCity :req.body.eduCity, eduDate :req.body.eduDates, proposalTitle :req.body.proposalTitle, }) user.save().then(result =>{ console.log(result) }).catch (err => { console.log(err) }) res.status(201).json ({ message:'handeling post request to /user-api', CreatedUserInfo : user }) })```
voici mon code:
const userEduSchema = new mongoose.Schema( { eduLevel : String , eduField : String, eduInst :String, eduCity :String, eduDate :Date, proposalTitle :String } ) const allEduSchema = new mongoose.Schema( { bsc: userEduSchema, master: userEduSchema, phd: userEduSchema , } ) module.exports = mongoose.model('Users', allEduSchema )
et c'est mon user.js
pour enregistrer les données inpute dans MongoDB, je ne sais pas si c'est vrai ou non:
{ "message": "handeling post request to /user-api", "CreatedUserInfo": { "_id": "5cbb7fbaad28fe209099a57c" } }
3 Réponses :
Avez-vous défini userSchema
? Sinon, vous essayez d'exporter un schéma qui n'existe pas. Encore une fois, si vous n'avez pas défini userSchema
et que vous souhaitez exporter allEduSchema
, remplacez la dernière ligne de votre fichier de modèle par ceci:
const EduSchema = mongoose.model("EduSchema", allEduSchema); module.exports = EduSchema;
merci, oui je le définis dans mon code et je le modifie dans ma question, toujours il ne renvoie rien :(
Qu'essayez-vous de faire? Avez-vous essayé Users.find ()?
Je veux sauvegarder mes entrées dans la base de données, je les publie mais quand je récupère les données ça ne renvoie rien et dans la base de données il suffit de sauvegarder le _id !!!
Je vois que vous créez un modèle userEduSchema
et non un modèle allEduSchema
. Vous devez utiliser ceci à la place module.exports = mongoose.model ('Users', userEduSchema)
. Vous n'avez pas non plus besoin de créer le _id
Malheureusement non, quand je définis un schéma simple, cela fonctionne, mais quand je définis comme imbriqué, cela ne fonctionne pas. Je pense que le problème est dans mon schéma mais je ne sais pas où !?
Où avez-vous besoin du schéma allEduSchema
?
Je veux utiliser la propriété de _ userEduSchema_ pour bsc ainsi que pour master et doctorat car les propriétés sont les mêmes que j'utilise le schéma imbriqué.
Après avoir créé chaque utilisateur (par exemple const userBsc = new userModels (..)
, const userMaster = new userModels (..)
et ainsi de suite, vous pouvez créer un nouveau modèle de allEduSchema
(par exemple allEduUser) comme ceci const userAllEdu = new allEduUser ({bsc: userBsc, master: userMaster, phd: userPhd})
. Notez que vous devez exporter le le schéma allEduSchema
également.
Avant de créer un nouvel utilisateur, vous devez avoir besoin de votre schéma d'orignal "Utilisateur". Tout comme Dimitris Tseggenes l'a dit.
J'utilise la fonction async et j'essaye / catch pour gérer ce problème. Peut-être que vous pourriez ....
router.post("/", async (request, response) => { try { const user = new Users({new user's data here..... }); const result = await user.save(); response.send(result); } catch (error) { response.status(400).send(error); }
}); p >
try catch pourrait éviter une erreur inattendue et la gérer.
Le problème était de définir la manière d'obtenir les entrées, je dois définir l'objet imbriqué et à l'intérieur de celui-ci mettre les corps de la requête ainsi que je définis le schéma imbriqué.
bsc:{ bscEduLevel :req.body.bscEduLevel, bscEduField :req.body.bscEduField, bscEduInst :req.body.bscEduInst, bscEduCity :req.body.bscEduCity, bscEduDate :req.body.bscEduDate, bscProposalTitle :req.body.bscProposalTitle }