路由生成
NServe 提供了强大的路由生成功能,可以根据配置文件自动生成 Express 路由相关代码,包括路由处理器、业务逻辑模板和路由注册文件。
路由生成流程
创建路由配置文件 在
nserve-config/router/目录下创建路由配置文件,例如user.ts。编写路由配置
typescriptimport { DefineGenRouter } from '@aicblock/nserve' export default DefineGenRouter({ servicePath: '/api/user', // 路由前缀 serviceHandler: 'user', // 处理逻辑目录 routers: [ { path: '/list', method: 'GET', name: 'list', middleware: [] }, { path: '/create', method: 'POST', name: 'create' }, { path: '/:id', method: 'GET', name: 'detail' }, { path: '/:id', method: 'PUT', name: 'update' }, { path: '/:id', method: 'DELETE', name: 'delete' } ], middleware: ['auth'] // 全局中间件 })运行生成命令
bashnserve gen生成的文件 NServe 会自动生成以下文件:
- 路由处理器文件
src/handler/user.handler.ts - 业务逻辑模板文件
src/logic/user/user.logic.ts - 路由注册文件
src/handler/router.ts
- 路由处理器文件
路由处理器
生成的路由处理器文件包含了路由的注册和参数验证逻辑:
typescript
import express from 'express'
import userList from '../logic/user/list.logic'
import userCreate from '../logic/user/create.logic'
import userDetail from '../logic/user/detail.logic'
import userUpdate from '../logic/user/update.logic'
import userDelete from '../logic/user/delete.logic'
const router = express.Router()
router.get('/list', userList)
router.post('/create', userCreate)
router.get('/:id', userDetail)
router.put('/:id', userUpdate)
router.delete('/:id', userDelete)
export default router业务逻辑模板
生成的业务逻辑文件包含了空的方法模板,供开发者实现具体的业务逻辑:
typescript
import { Request, Response } from 'express'
import { ErrorResponse, SuccessResponse } from '@aicblock/nserve/lib/tools'
export async function ServiceLogic(req: Request, res: Response) {
try {
SuccessResponse(res)
} catch (error) {
ErrorResponse(res, error)
}
}
export default ServiceLogic路由注册
生成的路由注册文件将所有路由整合到一起:
typescript
import express from 'express'
import userRouter from './user.handler'
const router = express.Router()
router.use('/api/user', userRouter)
export default router路由中间件
路由中间件可以在路由处理函数之前或之后执行,用于进行验证、日志记录、权限检查等操作。
js
// src/middleware/auth.middleware.ts
import type { Request, Response, NextFunction } from 'express'
const authMiddleware = (req: Request, res: Response, next: NextFunction) => {
if (req.headers.token === '123456') {
next()
} else {
ErrorResponse(res, new Error('token 无效'))
}
}
export default authMiddleware
// nserve.config.ts
import { DefineNserveConfig } from '@aicblock/nserve'
export default DefineNserveConfig({
...,
generateConfig: {
middleware: {
auth: { libName: '@/middleware/auth.middleware' }
}
}
})路由配置选项
路由配置支持以下选项:
servicePath- 路由前缀serviceHandler- 处理逻辑目录名routers- 路由数组path- 路由路径method- HTTP 方法name- 处理函数名middleware- 路由级中间件requestDataType- 路由请求数据类型定义responseDataType- 路由响应数据类型定义
middleware- 全局中间件