Bonjour,
Je suis en train de me former à Node.js et je fais face à un problème que je ne comprends pas.
Je déclare la fonction suivante dans un fichier model :
Lorsque cette fonction est appelée, je récupère ceci dans mon postman :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 module.exports.updateUser=async (req,res) => { if (!ObjectID.isValid(req.params.id)) return res.status(400).send("Id unknown "+req.params.id) try { await UserModel.findOneAndUpdate( {_id:req.params.id}, { $set:{ bio:req.body.bio } }, {new:true,upsert:true,setDefaultsOnInsert:true}, (err,docs)=>{ if (!err) return res.send(docs) if (err) return res.status(500).send({message: err}) } ) } catch (err) { return res.status(500).send({message:err}) } }
Et dans la console :{
"message":{
"originalStack": "Error
at model.Query._wrappedThunk [as _findOneAndUpdate] (/Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/mongoose/lib/helpers/query/wrapThunk.js:25:28)
at /Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/kareem/index.js:279:20
at _next (/Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/kareem/index.js:103:16)
at /Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/kareem/index.js:508:38
at processTicksAndRejections (node:internal/process/task_queues:78:11)"
}
}
En revanche, si je remplace cette lignenode:events:371
throw er; // Unhandled 'error' event
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:371:5)
at ServerResponse.setHeader (node:_http_outgoing:573:11)
at ServerResponse.header (/Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/express/lib/response.js:771:10)
at ServerResponse.send (/Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/express/lib/response.js:267:15)
at ServerResponse.send (/Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/express/lib/response.js:158:21)
at /Users/stephane/IdeaProjects/tutorials/mern-project/controllers/user.controller.js:34:38
at /Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/mongoose/lib/model.js:4912:18
at processTicksAndRejections (node:internal/process/task_queues:78:11)
Emitted 'error' event on Function instance at:
at /Users/stephane/IdeaProjects/tutorials/mern-project/node_modules/mongoose/lib/model.js:4914:15
at processTicksAndRejections (node:internal/process/task_queues:78:11) {
code: 'ERR_HTTP_HEADERS_SENT'
}
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 await UserModel.findOneAndUpdate(
Ca fonctionne!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UserModel.findOneAndUpdate(
Je comprends que j'ai une erreur dans mon utilisation de l'appel asynchrone qui déclenche une réponse d'erreur (celle recue par postman), et que du coup le second envoi de réponse explicite (res.send(docs)) envoie l'erreur présente dans la console.
Dans tous les cas, l'update est fait dans MongoDB.
Je suis un peu perdu alors si quelqu'un a la gentillesse de m'expliquer ou de me mettre sur la voie, ca serait super sympa.
Stéphane
Partager