Express(Node.js)应用中能否使用多路由文件及通用路由文件?
当然可以!这正是Express项目优化代码结构的常用方案
完全可以使用不同的路由文件,而且设置一个通用路由入口来统一引入其他路由,是让项目结构更清晰、更易维护的好办法,非常适配你现在的目录布局。
1. 拆分不同的路由文件
你已经把路由拆成了route.js、passport.routes.js、somemodel.routes.js,这步做的很对!每个路由文件可以专注处理某一类业务的路由逻辑,比如passport.routes.js专门处理登录、注册这类认证路由,somemodel.routes.js专注对应模型的CRUD操作路由。
举个例子,你的somemodel.routes.js可以这么写:
const express = require('express'); const router = express.Router(); const someModelController = require('../controllers/somemodel.controller.js'); // 定义该模型的业务路由 router.get('/somemodel', someModelController.getAll); router.post('/somemodel', someModelController.create); router.get('/somemodel/:id', someModelController.getById); module.exports = router;
passport.routes.js可以专门处理认证相关逻辑:
const express = require('express'); const router = express.Router(); const passport = require('passport'); router.get('/login', (req, res) => { res.render('passport/login'); }); router.post('/login', passport.authenticate('local', { successRedirect: '/profile', failureRedirect: '/login' })); router.get('/profile', (req, res) => { res.render('passport/profile'); }); module.exports = router;
2. 设置通用路由文件统一引入
你可以在routes目录下创建一个index.js作为通用路由入口,把所有拆分的路由文件都引入进来,然后统一挂载到不同的路径前缀(或者同一个前缀,按需调整)。
比如routes/index.js:
const express = require('express'); const router = express.Router(); // 引入各个子路由文件 const mainRoutes = require('./route.js'); const passportRoutes = require('./passport.routes.js'); const someModelRoutes = require('./somemodel.routes.js'); // 给不同路由设置前缀区分,挂载到通用路由上 router.use('/', mainRoutes); // 主路由,比如首页、基础页面 router.use('/auth', passportRoutes); // 认证类路由统一以/auth开头,比如/auth/login router.use('/api', someModelRoutes); // 数据接口类路由统一以/api开头,比如/api/somemodel module.exports = router;
最后在你的server.js里,只需要引入这个通用路由文件,挂载到根路径即可:
const express = require('express'); const app = express(); const routes = require('./routes/index.js'); // 先配置其他中间件(比如模板引擎、passport、数据库连接等) app.set('view engine', 'ejs'); // ... 其他项目配置 // 挂载所有路由 app.use('/', routes); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });
这样做的好处是,以后新增路由文件,只需要在routes/index.js里引入并挂载就行,不用修改server.js,代码结构更模块化,也更方便后续维护。当然如果项目规模较小,你也可以直接在server.js里逐个引入路由文件,但通用入口的方式在路由增多后优势会更明显。
内容的提问来源于stack exchange,提问作者Afsanefda
相关产品推荐
相关产品推荐

