web-dev-qa-db-fra.com

Utilisation de la méthode PUT avec Express.js

J'essaie d'implémenter une fonctionnalité de mise à jour dans une application Express.js, et j'aimerais utiliser une demande PUT pour envoyer les nouvelles données, mais je continue à recevoir des erreurs en utilisant PUT. D'après tout ce que j'ai lu, il s'agit simplement d'utiliser app.put, mais cela ne fonctionne pas. J'ai les éléments suivants dans mon fichier de routes:

send = function(req, res) { 
    req.send(res.locals.content);
};

app.put('/api/:company', function(res,req) {
    res.send('this is an update');
}, send);

Lorsque j'utilise postman pour faire une demande PUT, j'obtiens un message d'erreur "Can't PUT/api/petshop". Je ne comprends pas pourquoi je ne peux pas mettre ou ce qui ne va pas.

15
Brandon

Il se peut que vous ne disposiez pas de la fonction de mise à jour réelle. Vous avez le chemin put renvoyant le résultat au client mais manquant la partie lorsque vous dites à la base de données de mettre à jour les données.

Si vous utilisez mongodb et express, vous pouvez écrire quelque chose comme:

app.put('/api/:company', function (req, res) {
    var company = req.company;

    company = _.extend(company, req.body);

    company.save(function(err) {
    if (err) {
        return res.send('/company', {
            errors: err.errors,
            company: company
        });
    } else {
        res.jsonp(company);
    }

}); 

Ce projet de pile moyen peut vous aider car il couvre cette fonctionnalité CRUD que je viens d'utiliser ici en échangeant leurs articles pour vos entreprises. Pareil pareil.

13
headwinds

changer l'ordre de la fonction de rappel (req, res). pas utiliser la fonction (res, req).

0
jet street

De plus, si vous souhaitez rediriger dans put ou delete (vers l'adresse get), vous ne pouvez pas utiliser la fonction res.redirect('/path') normale, vous devez utiliser res.redirect(303, '/path') à la place. ( source )

Sinon, vous obtiendrez Cannot PUT Erreur.

0
yaya