如何在Nodejs Express应用程序中组织路由

17

我正在开发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中要求此文件。

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

3个回答

18

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

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

    |-- 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);
};

我只是像这样导入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保持干净和简短。

当需要时,您还可以将其他文件(例如数据库连接)添加到startup文件夹中,并将它们导入到App.js中。


很抱歉,但是为什么我们需要在routes.js中使用'app.use(express.json())'呢? - beedrill
@beedrill https://dev59.com/DFYN5IYBdhLWcg3wlI7G - SuleymanSah

14

有多种实现方法。这是我觉得方便的方法。

您可以为路由设置一个文件夹,并在其中包含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);

谢谢!


刚刚使用了这个布局,对我来说效果很好。 - CodeConnoisseur

4
我喜欢的组织方式是在我的根目录中有一个名为routes的文件夹。 因此,该文件夹将位于:
[你的项目名称]/routes/
routes文件夹中,我有一个名为router.js的文件。
你可以随意命名这个文件。 可以取一个有意义的名字,像 routerroutes
因此,你的router文件夹结构将类似于这样:
[你的项目名称]/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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接