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:
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 :Citation:
{
"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 ligneCitation:
node: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'
}
parCode:
1
2 await UserModel.findOneAndUpdate(
Ca fonctionne!Code:
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