【问题标题】:How to organize routes in Nodejs Express app如何在 Nodejs Express 应用程序中组织路线
【发布时间】:2020-04-28 02:54:35
【问题描述】:

我正在开发 Nodejs/Express 应用程序。我使用 express-generator 创建基本结构。现在在 app.js 文件中指定所有路由

var indexRouter = require('./routes/index');
var router1Router = require('./routes/router1');
var router2Router = require('./routes/router2');
......
app.use('/', indexRouter);
app.use('/router1', router1Router);
app.use('/router2', router2Router);

一切都按预期进行。但是我遇到了一个建议,将 routes.js 文件放在应用程序的根文件夹中,并且

需要所有路由,然后在 app.js 中需要这个文件

但是,我很难弄清楚如何正确设置它。 任何建议将不胜感激。提前致谢。

【问题讨论】:

    标签: node.js express routes


    【解决方案1】:

    保持主文件简短是个好主意。

    我把我所有的路线都放到了路线文件夹中。

        |-- app.js
        |-- routes
        |   |-- index.js
        |   |-- router1.js
        |   |-- router2.js
        |-- startup
        |   |-- routes.js
    

    在 startup/routes.js 文件中,我像这样导入所有路由:

    const express = require("express");
    var indexRouter = require("../routes/index");
    var router1Router = require("../routes/router1");
    var router2Router = require("../routes/router2");
    
    module.exports = function(app) {
      app.use(express.json());
    
      app.use("/", indexRouter);
      app.use("/router1", router1Router);
      app.use("/router2", router2Router);
    };
    

    而 App.js 我只像这样导入 startup/routes.js:

    const express = require("express");
    const app = express();
    
    require("./startup/routes")(app);
    
    const port = process.env.PORT || 3000;
    
    app.listen(port, () => console.log(`Listening on port ${port}...`));
    

    这样,当我们想为我们的应用添加另一个路由时,我们将它添加到startup/routes.js中,而不需要对App.js文件进行更改,这样可以保持我们的App.js简洁明了.

    您也可以稍后在需要时将其他文件(例如数据库连接)添加到启动文件夹,并将它们导入到 App.js。

    【讨论】:

    【解决方案2】:

    实现这一目标的多种方法。这是我觉得方便的。 你可以有一个路由文件夹,在那里你可以有 index.js 和你需要的其他路由的文件。 例子: 文件:src/routes/index.js

    const express = require('express');
    const contactusRoutes = require('./contactus.routes');
    
    const apiRouter = express.Router();
    
    apiRouter.use('/contactus', contactusRoutes);
    
    module.exports = apiRouter;
    

    文件:/src/routes/contactus.routes.js

    const express = require('express');
    
    const contactusRoutes = express.Router();
    
    const contactusController = require('../controllers/contactus.controller');
    
    contactusRoutes.post('/', errorHandler.wrapAsync(contactusController.someFunctionName));
    
    module.exports = contactusRoutes;
    

    你可以有更多这样的文件。

    文件:server.js/app.js

    将这些添加到 server.js/app.js

    const apiRoutes = require('./src/routes/index');
    
    server.use('/api', apiRoutes);
    

    谢谢!

    【讨论】:

      【解决方案3】:

      我喜欢组织它的方式是在我的根目录中有一个routes 文件夹。

      所以文件夹将位于:
      [name of your project]/routes/

      routes 文件夹中,我有一个router.js 文件。
      您可以随意调用此文件。有意义的东西。
      喜欢routerroutes

      所以您的router 文件夹结构将如下所示:
      [name of your project]/routes/router.js

      在我的router.js 文件中,我有以下声明:

      这只是一个例子

      const express = require('express');
      const router = express.Router();
      const api = require(../api);
      
      /* GET environments */
      router.get('/environments', (req, res) =>
      {
          res.json({ environments: api.getSortedEnvironments() });
      });
      
      ... 
      
      module.exports = router;
      

      上述代码中的基本部分是顶部的expressrouter 声明和底部的module.exports 部分。

      然后在我的app.js 文件中,我有以下代码:

      //at the top
      const router = require('./routes/router');
      

      我是这样使用它的:

      app.use('/', router);
      

      这意味着您的用户尝试访问的任何端点都将自动转发到您声明的“路由器”/由您声明的“路由器”处理。

      让您的app.js 文件保持整洁。

      您的完整文件夹结构应如下所示:

      MyAmazingProject
      |-- ...
      |-- routes
      |   `-- router.js
      |-- ...
      `-- app.js
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 1970-01-01
        • 2021-09-07
        • 2019-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多