Node.js Restify框架如何实现类似Laravel的路由分组功能?
Restify路由分组能力说明
Restify完全提供和Laravel路由分组逻辑高度匹配的能力,可以批量配置统一前缀、路由命名前缀、中间件等属性,完美适配你习惯的API版本控制、批量路由权限控制等场景,迁移成本极低。
基础用法示例
对应你给出的Laravel路由代码,等价的Restify 8.x+版本实现如下:
const restify = require('restify'); const server = restify.createServer(); // 加载基础解析插件 server.use(restify.plugins.bodyParser()); // 引入对应控制器(对应Laravel的命名空间加载逻辑) const RadioController = require('./app/controllers/RadioController'); const RegisterController = require('./app/controllers/Auth/RegisterController'); const LoginController = require('./app/controllers/Auth/LoginController'); // 引入鉴权中间件(对应Laravel的auth:api) const authApi = require('./app/middleware/authApi');
1. 公开V1接口分组(对应Laravel的$API_V1配置)
server.group({ prefix: '/v1', name: 'api.' // 对应Laravel的as属性,路由命名前缀 }, (group) => { group.get('/stations', RadioController.listStations); group.get('/stations/country', RadioController.listStationsByCountry); group.get('/stations/genres', RadioController.listStationsGenres); });
2. 需鉴权V1接口分组(对应Laravel的$API_V1_RESTRICTED配置)
server.group({ prefix: '/v1', name: 'api.', middleware: [authApi] // 支持传入多个中间件,批量应用到分组下所有路由 }, (group) => { group.post('/stations', RadioController.addStation); group.put('/stations/:id', RadioController.updateStation); group.del('/stations/:id', RadioController.deleteStation); group.get('/user', RadioController.CheckUser); });
3. 鉴权端点V1分组(对应Laravel的$API_V1_REGISTER配置)
server.group({ prefix: '/v1', name: 'api.' }, (group) => { group.post('/register', RegisterController.register); group.post('/login', LoginController.login); group.get('/logout', LoginController.logout); });
额外使用说明
- Restify支持嵌套分组,可在group的回调函数中继续调用group方法创建子分组,子分组会自动继承父分组的前缀、中间件等配置,和Laravel嵌套分组逻辑完全一致
- 中间件优先级和Laravel对齐:单路由中间件 > 分组中间件 > 全局中间件
- 如果你使用的是Restify 7.x及更早版本,group方法可直接传前缀字符串作为第一个参数,分组中间件可以通过
group.use(中间件)方法单独挂载
内容的提问来源于stack exchange,提问作者Hojzerice
相关产品推荐
相关产品推荐

