如何让Express所有路由自动以/api为前缀而无需显式定义
Express 统一路由 /api 前缀实现方案
有两种常用的实现方式,可根据实际场景选择:
方法1:使用 Express 内置 Router 挂载前缀(官方推荐)
这是Express生态的标准写法,通过子路由实例统一挂载前缀,路由层级清晰,便于后续扩展维护:
const express = require('express'); const app = express(); // 实例化子路由,所有业务路由都定义在这个子路由上 const apiRouter = express.Router(); // 路由定义不需要加/api前缀,直接写相对路径即可 apiRouter.get('/endpoint-A', (req, res) => { return res.send('A'); }); apiRouter.get('/endpoint-B', (req, res) => { return res.send('B'); }); // 把子路由整体挂载到 /api 前缀下 app.use('/api', apiRouter);
该方案支持多模块分组设置不同前缀,没有额外兼容性问题,优先推荐使用
方法2:全局中间件修改请求路径(仅适用于旧代码兼容场景)
如果不想改动现有路由的定义逻辑,可以通过全局中间件批量给请求路径拼接/api前缀:
const express = require('express'); const app = express(); // 全局中间件统一处理路径前缀 app.use((req, res, next) => { // 避免重复拼接前缀 if (!req.path.startsWith('/api')) { req.url = `/api${req.url}`; } next(); }); // 路由定义完全不需要改动 app.get('/endpoint-A', (req, res) => { return res.send('A'); }); app.get('/endpoint-B', (req, res) => { return res.send('B'); });
该方案属于hack实现,可能和静态资源服务、第三方中间件产生路径冲突,非必要不建议使用
内容的提问来源于stack exchange,提问作者Jorge Montejo
相关产品推荐
相关产品推荐

