Node.js Express如何创建多路由页面并配置路由统一导出入口
实现方案
1. 参考目录结构
先统一目录结构避免路径匹配错误:
项目根目录 ├── app.js └── routes ├── index.js # 路由统一入口 ├── user.js # 子路由1 ├── files.js # 子路由2 └── test.js # 子路由3
2. 子路由编写
子路由导出express Router实例即可,你的写法是正确的,示例routes/test.js:
const router = require('express').Router(); router.get('/', (req, res) => { res.send("Test route") }); module.exports = router;
其他子路由(user.js、files.js)按相同规则编写即可。
3. CommonJS规范下路由集中导出
对应你期望的ES Module写法,Node.js默认CommonJS规范的routes/index.js写法如下:
// 引入所有子路由 const user = require('./user'); const files = require('./files'); const test = require('./test'); // 统一导出 module.exports = { user, files, test }
4. 解决app.use报错问题
你之前的报错原因:app.use要求传入的参数必须是中间件函数或者express Router实例,如果你直接把require('./routes')得到的普通对象传入,不符合参数要求就会抛出类型错误。
正确的app.js注册写法:
const express = require('express'); const app = express(); // 引入路由集合 const routes = require('./routes'); // 从路由集合中取出对应实例注册,绑定前缀 app.use('/test', routes.test); app.use('/users', routes.user); app.use('/files', routes.files); app.listen(3000, () => { console.log('服务启动在 http://localhost:3000'); })
简化扩展写法
如果你想让app.js只需要注册一次路由,可以在routes/index.js中提前完成子路由前缀绑定:
const express = require('express'); const router = express.Router(); // 引入子路由 const user = require('./user'); const files = require('./files'); const test = require('./test'); // 统一绑定子路由前缀 router.use('/test', test); router.use('/users', user); router.use('/files', files); module.exports = router;
此时app.js只需要一行代码注册所有路由:
const routes = require('./routes'); // 可以给所有路由加统一的全局前缀,比如/api,最终访问路径就是/api/test、/api/users app.use('/api', routes);
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

