web-dev-qa-db-ja.com

Express.jsはコントローラーでhttpメソッドを取得します

登録フォームを作成しています(認証としてパスポートローカル、フォームヘルパーとしてフォーム)。

登録はGETとPOSTのみを知っているため、1つの関数ですべての処理を行いたいと思います。

他の言葉で私は次のようなものを探しています:

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

答えはとても簡単でした

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

しかし、私はエクスプレスガイドでこのアプローチを長い間探しました。

最後に、ノードのドキュメントには次のような詳細な情報があります。 http://nodejs.org/api/http.html#http_http_request_options_callback

93
dev.pus

Npm => "method-override"でパッケージを使用できるようになりました。これにより、 "req.method"プロパティをオーバーライドするミドルウェアレイヤーが提供されます。

基本的に、クライアントは/registration/passportID?_method=PUTのような修正された「req.method」でPOSTリクエストを送信できます。

?_method = XXXXX

部分は、ミドルウェアがこれが潜伏PUT要求であることを識別するためのものです。

フローは、クライアントがPOST reqをサーバー側に送信し、ミドルウェアがreqを変換して、対応する「app.put ...」ルートを実行することです。

これは妥協の方法だと思います。詳細: method-override

0
zkmoonea