0
votes

Les méthodes PUT et GET avec router.put et router.delete ne fonctionnent pas (express)

Je suis en train de créer une application CRUD. Je suis bloqué sur l'opération de mise à jour et de suppression, tout le reste semble fonctionner. J'utilise donc le remplacement de méthode pour envoyer des requêtes PUT et GET.

Voici le code pertinent:

app.js

<form method="POST" action="/videos/<%= video._id %>?_method=PUT">
    <input type="hidden" name="_method" value="PUT">
</form>

Voici ce que j'ai écrit pour la mise à jour et la suppression. J'utilise le pilote moine pour mongodb.

index.js

<form action="/videos/<%= video._id %>?_method=DELETE" method="POST">
<button type="submit" class="btn btn-danger">Delete video</button>
</form>

Pour supprimer le formulaire

var router = express.Router();

router.put('/videos/:id', function(req, res){
    var collection = db.get('videos');
    var item = {
        title: req.body.title,
        genre: req.body.genre,
        image: req.body.image,
        description: req.body.desc
    };
    var id = req.params.id;
    collection.update(
    {_id: id}, {
        $set: item
    });
    res.redirect('/videos');
});

router.delete('/videos/:id', function(req, res){
    var collection = db.get('videos');
    collection.remove({"_id" : req.params.id});
    res.redirect('/videos');
});

Pour le formulaire de mise à jour

const methodOverride = require('method-override');
app.use(methodOverride('_method'));

J'ai cherché dans de nombreux endroits, j'obtiens toujours une erreur de page Web introuvable (404) lorsque j'appuie sur le bouton d'envoi. Qu'est-ce que je rate ? Le bouton d'envoi doit appeler les deux méthodes que j'ai montrées dans index.js .


10 commentaires

Qu'est-ce qui est réellement rendu dans la source HTML?


404, page Web introuvable.


Désolé, je parle de la source du formulaire.


La source est un formulaire dans lequel l'utilisateur peut entrer des détails qui sont ensuite envoyés à la base de données.


Oui je comprends. J'espérais que vous pourriez partager le formulaire html


C'est un formulaire HTML standard, lorsque j'appuie sur le bouton Soumettre, il va à / videos / video_id? _Method = DELETE, ce qui, je pense, n'est pas repris par les méthodes index.js .


Je comprends cela, mais comme je n'arrête pas de le dire ... Je pense qu'il est utile de partager la sortie HTML réelle au cas où il y aurait un problème. Voulez-vous de l'aide ou pas?


Le HTML est exactement le même que celui-ci , a dû ajouter {} dans les instructions d'importation. Lorsque je clique sur le bouton Soumettre, l'URL devient localhost: 3000 / videos / 5f9aa2e7ff1ef312a4776bdc? _Method = PUT et j'obtiens This localhost page can't be found .


Je demande le HTML rendu, pas la source d'origine dans le modèle.


Accédez donc à votre formulaire dans un navigateur. Appuyez sur "Afficher la source" ou utilisez vos outils de développement. Copiez la source HTML à partir de là. Appuyez sur 'modifier' dans le débordement de pile et collez le résultat ici aussi.


3 Réponses :


0
votes

Vérifiez si vous avez exporté le fichier index.js et importé dans le fichier app.js, et je pense que cela devrait fonctionner correctement, mais essayez de redémarrer le serveur et voyez si cela fonctionne. :)


2 commentaires

Avez-vous exporté les itinéraires depuis index.js et importés dans le fichier app.js?


Oui, je fais module.exports = router .



0
votes

La méthode de formulaire et l'itinéraire express ne correspondent pas.

La méthode de formulaire pour les deux sont POST respectivement.

Cependant, si vous regardez les routes express, les méthodes sont PUT et DELETE.

Essayez de changer les itinéraires et testez à nouveau si cela fonctionne.


2 commentaires

Ils sont envoyés en tant que requêtes POST et le remplacement de méthode les convertira en requêtes PUT et DELETE. C'est ce que j'ai lu dans les documents de remplacement de méthode. Je veux supprimer et mettre et entrer dans la base de données. La demande POST standard ne conviendra pas.


Ensuite, je pense que vous devriez inclure les bonnes balises. Des personnes ayant des connaissances pertinentes pourraient y répondre. Je ne pense pas que ce soit un problème node.js ou javascript. Inclure la balise de bibliothèque dans la question



0
votes

J'ai changé router.put et router.delete en router.post .


0 commentaires