将路由和中间件分离到文件中(Express.js)

Separating Routes and Middleware into Files (in Express.js)

我想将 routesmiddleware 从我的主要 app.coffee[= 中分离出来30=]-文件。 (我正在使用 Express.js。)

这个文件已经广泛并且不再容易浏览。

如何将它们放入单独的文件中,以便它们仍能相互识别?

使用中间件的路由示例:

app.post '/signup', signup.inputsOK, signup.userIsNew, signup.createUser, allowUser, (req, res) ->
  res.redirect '/'

每个中间件函数都应该对每个路由可用,并且每个路由都应该在主 app.coffee- 文件中可用!

谢谢你的想法!

请记住,Express 中间件只是函数,因此只要需要该函数就可以使用它。

user_routes.coffee

hello_user = ( req, res, next ) ->
    res.json {"message": "hi"}

module.exports = {
    hello_user : hello_user
}

app.coffee

user_routes = require './user_routes' 
app.post '/signup', signup.inputsOK, signup.userIsNew, signup.createUser, allowUser, user_routes.hello_user

我会像这样设置中间件:app.coffee 文件负责设置与中间件的路由和实际的业务逻辑功能...那么最后一个功能需要做的就是需要的实际工作。 (这也使得功能更容易进行单元测试,而不必伪造出 Express 路由)

或者,通过一些工作,您可以分离出路由并让每个文件执行 app.add 工作。 (我不喜欢这种方法,但很多应用程序都这样做)。

user_routes.coffee

setupUserRoutes = (app) ->
    app.post '/signup', signup.inputsOK, signup.userIsNew, signup.createUser, allowUser, (req, res) ->
      res.redirect '/'

module.exports = setupUserRoutes

app.coffee

app = express()

require( './user_routes' )(app)

在这里,您将 Express 对象传递给您导入的每个新模块。由于您将 exports 设置为仅一个函数 - 它采用一个参数,即创建的 Express 对象 - 您可以使用所需的中间件创建路由