Shrimp.getMenuTree() 之前默认输出 { t: '<moduleKey>.menuManage' },
强加一个用户未必写过的 i18n key,不写翻译就显示 raw key。退化为直接
用 module.label —— 模块注册时已声明,不另起 key。
UserModule / RoleModule 同步补 label: 之前 super(parent, "user", ...)
没传 label,会落到 ShrimpTableModule 默认的 { t: moduleKey };现在显
式传 { t: "user.menuManage" } / { t: "role.menuManage" },沿用 hand-
admin 已有的翻译键,迁移零成本。
demo 里临时塞的 DemoShrimp 子类清掉,直接 new Shrimp()。
basic-admin demo
零外部依赖的 Shrimp demo,只用内存 CRUD,不依赖 MongoDB。
证明:Shrimp 的核心(模块注册 / RPC dispatch / 字段配置)在没有 mongoose、没有 JWT、没有用户表的情况下也能跑。
起服务
从 demo 目录起(本地链 shrimp-server):
cd examples/basic-admin
npm install
npm start
或者从仓库根目录直接 npm run demo(由根 package.json 提供)。
服务起在 http://localhost:3100。
试一下
# 列商品
curl -s -X POST http://localhost:3100/api/product/list \
-H 'content-type: application/json' -d '[{}]' | jq
# 列标签
curl -s -X POST http://localhost:3100/api/tag/list \
-H 'content-type: application/json' -d '[{}]' | jq
# 新增商品
curl -s -X POST http://localhost:3100/api/product/add \
-H 'content-type: application/json' \
-d '[{"code":"P003","name":"橙子","price":4,"tagIds":[]}]' | jq
# 改某个商品
curl -s -X POST http://localhost:3100/api/product/edit \
-H 'content-type: application/json' -d '["1",{"price":99}]' | jq
# 删除商品
curl -s -X POST http://localhost:3100/api/product/delete \
-H 'content-type: application/json' -d '["1"]' | jq
请求体永远是参数数组,按位置传给事件 handler。
这个 demo 暴露了哪些 70→90 的问题
Shrimp.ts:322的if ((dataSource as any).model)让 MemoryShrimpCrud 不能注册到crudRegistry,relation populate 自动联表对内存数据源不生效- 没有现成的 RPC mount helper — 这段
app.post("/api/*splat", ...)应该是框架提供的,而不是 demo 里手写 - 要登录 / 鉴权要么自己写,要么用 ShrimpServer 强吃 Mongo+JWT,中间没有"我只想要 RPC + 模块,自己接 auth"这条路径