web-dev-qa-db-fra.com

Express.js obtient la méthode http dans le contrôleur

Je construis un formulaire d'enregistrement (passeport local comme authentification, formulaires d'aide de formulaire).

Étant donné que l'enregistrement ne connaît que les opérations GET et POST, je souhaite effectuer l'ensemble du traitement dans une fonction.

En d'autres termes, je cherche quelque chose comme:

exports.register = function(req, res){
    if (req.isPost) {
       // do form handling
    }
    res.render('user/registration.html.swig', { form: form.toHTML() });
};
46
dev.pus

La réponse était assez facile

exports.register = function(req, res) {
    if (req.method == "POST") {
       // do form handling
    }
    res.render('user/registration.html.swig', { form: form.toHTML() });
};

Mais j'ai longtemps cherché cette approche dans le guide express.

Enfin, la documentation du noeud contient de telles informations détaillées: http://nodejs.org/api/http.html#http_http_request_options_callback

80
dev.pus

Vous pouvez maintenant utiliser un package dans npm => "method-override", qui fournit une couche intermédiaire qui redéfinit la propriété "req.method".

En gros, votre client peut envoyer une demande POST avec un "req.method" modifié, quelque chose comme /registration/passportID?_method=PUT

Le 

? _method = XXXXX

partie est pour le middleware pour identifier qu'il s'agit d'une demande PUT d'infiltration. 

Le flux consiste en ce que le client envoie un POST req avec des données côté serveur, et le middleware traduit le req et exécute la route "app.put ..." correspondante.

Je pense que c'est un moyen de compromis. Pour plus d'informations: method-override

0
zkmoonea