适用于简单数据模型,无复杂业务逻辑,仅需基础CRUD操作的场景。采用GenericCrudService和createCrudRoutes快速生成接口。
src/server/modules/[模块名]/[实体名].entity.tsuser.entity.ts在src/server/data-source.ts中添加实体导入和注册:
// 实体类导入
import { YourEntity } from "./modules/[模块名]/[实体名].entity"
export const AppDataSource = new DataSource({
// ...其他配置
entities: [
User, Role, YourEntity // 添加新实体到数组
],
// ...其他配置
});
src/server/modules/[模块名]/[实体名].service.tsGenericCrudService通过构造函数注入DataSource
import { GenericCrudService } from '@/server/utils/generic-crud.service';
import { DataSource } from 'typeorm';
import { YourEntity } from './your-entity.entity';
export class YourEntityService extends GenericCrudService<YourEntity> {
constructor(dataSource: DataSource) {
super(dataSource, YourEntity);
}
}
使用createCrudRoutes快速生成CRUD路由:
import { createCrudRoutes } from '@/server/utils/generic-crud.routes';
import { YourEntity } from '@/server/modules/your-module/your-entity.entity';
import { YourEntitySchema, CreateYourEntityDto, UpdateYourEntityDto } from '@/server/modules/your-module/your-entity.entity';
import { authMiddleware } from '@/server/middleware/auth.middleware';
const yourEntityRoutes = createCrudRoutes({
entity: YourEntity,
createSchema: CreateYourEntityDto,
updateSchema: UpdateYourEntityDto,
getSchema: YourEntitySchema,
listSchema: YourEntitySchema,
searchFields: ['name', 'description'], // 可选,指定搜索字段
middleware: [authMiddleware] // 可选,添加中间件
});
export default yourEntityRoutes;
在src/server/api.ts中添加路由注册:
import yourEntityRoutes from '@/server/api/your-entity/index';
// 注册路由
api.route('/api/v1/your-entities', yourEntityRoutes);
在src/client/api.ts中添加客户端定义:
import { hc } from 'hono/client';
import { YourEntityRoutes } from '@/server/api';
export const yourEntityClient = hc<YourEntityRoutes>('/api/v1', {
fetch: axiosFetch,
}).api.v1['your-entities'];
在页面组件(如Users.tsx)中:
InferResponseType提取响应类型InferRequestType提取请求类型示例:
type EntityResponse = InferResponseType<typeof entityClient.$get, 200>;
type CreateRequest = InferRequestType<typeof entityClient.$post>['json'];
- **注册路由**:在`src/client/admin/routes.tsx`中添加路由配置
- **注册菜单**:在`src/client/admin/menu.tsx`中添加菜单配置