11480 sujets

JavaScript, DOM et API Web HTML5



app.post('/api/products', (req, res, next) => {
  const product = new Product({
    ...req.body
  });
  product.save()
    .then(() => res.status(201).json({ product }))
    .catch(error => res.status(400).json({ error }));
});
 
app.get('/api/products/:id', (req, res, next) => {
  Product.findOne({ _id: req.params.id })
    .then(product => res.status(200).json({ product }))
    .catch(error => res.status(404).json({ error }));
});
 
app.put('/api/products/:id', (req, res, next) => {
  Product.updateOne({ _id: req.params.id }, { ...req.body, _id: req.params.id })
    .then(() => res.status(200).json({ message: 'Objet modifié !'}))
    .catch(error => res.status(400).json({ error }));
});
 
app.delete('/api/products/:id', (req, res, next) => {
  Product.deleteOne({ _id: req.params.id })
    .then(() => res.status(200).json({ message: 'Deleted !'}))
    .catch(error => res.status(400).json({ error }));
});
 
app.get('/api/products', (req, res, next) => {
    Product.find()
      .then(products => res.status(200).json({ products }))
      .catch(error => res.status(400).json({ error }));
});



Modifié par DiegoGaby (19 Apr 2020 - 02:37)
Bonjour,

Merci d'avoir laissé le code mais il est dommage d'avoir édité sans la question de départ car sans le contexte difficile de comprendre après coup... En effet, après avoir laissé tombé l'affaire il y a trois ans je m'intéresse à nouveau à Express.

Et notamment ici, quelque chose m'intrigue :
app.get('/api/products/:id', (req, res, next) => {
  Product.findOne({ _id: req.params.id })
    .then(product => res.status(200).json({ product }))
    .catch(error => res.status(404).json({ error }));
});


Comment est gérée l'erreur en cas de données inexistantes dans la base ? Personnellement je traiterais le cas avec next() dans le .catch(), mais s'il existe d'autres méthodes je suis intéressé de les connaître.

Mais sans doute que dans votre cas il s'agit d'une application, et dans ce cas la gestion des routes n'est pas la même que pour un site (le cas qui m'occupe).