web-dev-qa-db-ja.com

Node.js /Express.jsの独自のファイルにミドルウェアを配置する方法

私はNode.js全体に慣れていないので、物事がどのように「接続」するかについてのコツをつかもうとしています。

express-form 検証を使用しようとしています。ドキュメントによると、あなたはすることができます

_app.post( '/user', // Route  
  form( // Form filter and validation middleware
    filter("username").trim()
  ),

  // Express request-handler gets filtered and validated data
  function(req, res){
    if (!req.form.isValid) {
      // Handle errors
      console.log(req.form.errors);

    } else {
      // Or, use filtered form data from the form object:
      console.log("Username:", req.form.username);

    }
  }
);
_

App.js内。ただし、app.get('/user', user.index);のようなものを配置すると、コントローラーコードを別のファイルに配置できます。検証ミドルウェアでも同じことを行い(または検証コードをコントローラーに配置して)、ページを追加し始めたらApp.jsファイルの概要を簡単に確認できるようにします。

これを達成する方法はありますか?

基本的にはapp.get('/user', validation.user, user.index);のようなものを入れたいと思います

19
danneth

ルートの定義方法は次のとおりです。

routes.js:

module.exports = function(app){
    app.get("route1", function(req,res){...})
    app.get("route2", function(req,res){...})
}

これは、ミドルウェアを定義する方法です。

middlewares.js:

module.exports = {
    formHandler: function(req, res, next){...}
}

app.js:

// Add your middlewares:
middlewares = require("middlewares");
app.use(middlewares.formHandler);
app.use(middlewares...);

// Initialize your routes:
require("routes")(app)

別の方法は、ミドルウェアを使用することですルートごと

routes.js:

middlewares = require("middlewares")
module.exports = function(app){
    app.get("route1", middlewares.formHandler, function(req,res){...})
    app.get("route2", function(req,res){...})
}

私はあなたの質問に答えることを望みます。

49

コントローラ関数の場合とまったく同じ方法で、ミドルウェア関数を別のモジュールに配置できます。これは、適切なパラメーターのセットを持つエクスポートされた関数です。

だからあなたがvalidation.jsファイルの場合、user検証メソッドを次のように追加できます。

exports.user = function (req, res, next) {
  ... // validate req and call next when done
};
3
JohnnyHK