【问题标题】:Separating Routes and Middleware into Files (in Express.js)将路由和中间件分离到文件中(在 Express.js 中)
【发布时间】:2016-11-07 04:07:01
【问题描述】:

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

此文件已扩展,不再容易浏览。

如何将它们放入单独的文件中,以便它们仍然相互了解?

使用中间件的路由示例:

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

每个路由都应该有每个中间件功能,并且每个路由都应该在 app.coffee 主文件中可用!

感谢您的想法!

【问题讨论】:

    标签: node.js coffeescript


    【解决方案1】:

    记住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 对象传递给您导入的每个新模块。由于您将导出设置为只有一个函数 - 它采用一个参数,即创建的 Express 对象 - 您可以使用所需的中间件创建路由

    【讨论】:

    • 你能告诉我更多如何分离中间件功能,以便我可以从我的路由文件中访问它们吗?
    • 我在第一个示例中清理了一些格式错误的代码,但我不确定您还想要什么:创建函数,将其添加到 module.exports,然后当您 require() 该模块时一个变量,该变量反映了 module.exports 中的内容。这种解释可能使一切不太有用,但希望它确实有所帮助
    • stackoverflow.com/questions/14958296/… 这是一个很好的答案。
    猜你喜欢
    • 2022-06-11
    • 2022-12-03
    • 2017-03-14
    • 1970-01-01
    • 2017-11-03
    • 2016-06-11
    • 1970-01-01
    • 2019-03-31
    • 2016-08-03
    相关资源
    最近更新 更多