2017-10-19 4 views
1

Je rencontre un problème en utilisant la méthode override et en essayant de l'utiliser pour PUT à un élément dans Mongo. Je peux donc faire l'appel à Postman et ont la mise à jour du document comme prévu, mais en essayant de le faire de par l'interface utilisateur que nous recevons:Remplacement de noeud/méthode donnant une erreur sur PUT

Request URL:http://localhost:3000/characters/?_method=PUT 
Request Method:POST 
Status Code:404 Not Found 

Voici les routes et autres:

app.js

const express = require('express'); 
const bodyParser = require('body-parser'); 
const methodOverride = require('method-override'); 
// 
// 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
app.use(methodOverride('_method')); 

routes

router.put('/:id', (req, res) => { 
     Character.findOne({ 
     _id: req.params.id 
     }) 
    .then(character => { 
    // 
    // 
    character 
    .save() 
    .then(character => { 
     res.redirect('/characters/show/${character.id}'); 
    }) 
}); 

et le HTML

<form action="/characters/{{character.id}}?_method=PUT" method="POST" class="col s12"> 
    <input type="hidden" name="_method" value="PUT" /> 
    <input type="submit" value="Save" class="btn"> 
    </form> 

Merci à tous, toute aide serait appréciée.

+0

devrait-il être 'router.put ('/ caractères /: id' ou est-ce routeur déjà attaché à un routeur avec le préfixe'/characters'? –

+0

Dans les deux cas, la route demandée n'existe pas dans le code - le ': id' est manquant. – doublesharp

Répondre

0

Vous ne passez pas de valeur pour :id dans l'itinéraire et vous ne disposez pas d'itinéraire pour /characters/.

URL:http://localhost:3000/characters/?_method=PUT

Vous devez vous assurer que character.id est réglé - il semble être vide dans votre exemple.

action="/characters/{{character.id}}?_method=PUT"

Vous êtes également POST comme spécifiant la méthode de la forme, vous devez utiliser PUT.

method="PUT"

Si vous voulez faire le paramètre :id en option suivre avec un point d'interrogation:

router.put('/:id?', (req, res) => {

Vous pouvez également tester la route par dur coder une valeur et voir si vous obtenez toujours un 404.

action="/characters/123?_method=PUT"

+0

L'OP utilise le middleware 'method-override', donc le' method = "POST" 'sur le formulaire devrait fonctionner correctement. – skirtle