Express ne peut pas mettre / supprimer la méthode. Qu'est-ce qui ne va pas?
Ok, Donc j'ai un simple node.js /express.js /mongodb app mettre en place ici avec ma config comme suit.
var express = require('express'),
mongoose = require('mongoose');
http = require('http');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
//middleware stack
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + "/public"));
});
mongoose.connect("mongodb://localhost/hello");
Le problème se situe lorsque je tente de faire METTRE ou SUPPRIMER des demandes. Mon formulaire est à cette simple
<form method="POST" action="/users/#{user.name}">
<input type="hidden" name="_method" value="PUT"/>
</form>
Maintenant mon routeur captures de la route avec l'express .put() la méthode
app.put('/users/:name', function(req, res) {
var b = req.body;
Users.update(
{ name: req.user.name },
{ name: b.name, age: b.age, email: b.email },
function(err) {
res.redirect('/users/'+b.name);
});
})
Quand je fais la demande, je tout simplement obtenir un "Ne peut pas METTRE" ou "Impossible de SUPPRIMER" erreur.
J'ai essayé de faire cette même demande par l'intermédiaire de chomes Reposant client avec le même résultat.
J'ai lu un sujet sorcière a le même problème que moi, bien que suivant les commentaires et les réponses ne permet pas de résoudre mon problème.
Questions, j'ai regardé dans
expressjs de soutien pour la méthode delete et put, sans methodoverride
Sont le PUT, DELETE, TÊTE, etc méthodes disponibles dans la plupart des navigateurs web?
Ainsi que quelques autres.
J'ai également fait référence à l'express.js et mongo de la documentation à plusieurs reprises.
Je ne peux pas penser à ce qui pourrait mal se passer.
Toute aide est appréciée.
source d'informationauteur Daniel Tate
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Que Jonathan Lonowski souligné
PUT
peut également être utilisé, de sorte que vous pouvez ignorer mon ancienne réponse.Obtenir
Cannot PUT
ouCannot POST
erreurs, signifie que votre rappel n'est pas de réaliser avec succès. Ma conjecture est queUsers.update
est un échec, c'est pourquoi il ne peut pas POST ou PUT. Pouvez-vous le vérifier.Vieille réponse
Essayez de changer cette ligne
à
depuis que vous essayez d'envoyer le formulaire
Est le
<form>
- vous inscrit dans une vue ou unstatic
fichier sous__dirname + "/public"
?Dans un fichier statique, la
#{user.name}
n'est probablement pas remplacé par leuser
'sname
et sera traitée comme une Fragment d'URL.La
<form>
va réellement se soumettre à/users/
plutôt que/users/:name
puisque c'est lepath
:La
<form>
doit être généré à partir d'un point de vue si ce n'est pas depuis leaction
doit être dynamique et pilotés par les données. Avec Jade et en supposantuser
est un membre delocals
ce serait:À moins qu'il y est étrange magie au travail, votre formulaire constitue une demande POST, pas de vente. Si vous voulez METTRE, je vous recommande d'utiliser le
jQuery.ajax
fonction avec untype: 'PUT'
paramètre, comme cette réponseà partir d'un programme de traitement de formulaire, voirjQuery.soumettre
. N'oubliez pas dereturn false
de sorte que la forme n'est pas nécessaire de soumettre deux fois.