安装
它居然需要执行一个命令才能安装成功,太慢了
npx create-aomex@latest
路由
最基础的路由,不过就是帮你做参数守卫,顺便搞个类型提示
import { rule } from '@aomex/core';
import { Router, query } from '@aomex/web';
export const router = new Router({ prefix: '/users' });
router.get('/', {
mount: [
query({
page: rule.int().min(1).default(1),
size: rule.int().min(5).max(100).default(10),
}),
],
action: async (ctx) => {
const { page, size } = ctx.query;
const users = await logic.getUsers(page, size);
ctx.send(users);
}
});
完整点的路由,顶多就是加个响应的内容,让你的swagger文档丰满一些,顺便做个类型提示
router.get('/', {
mount: [
query({
page: rule.int().min(1).default(1),
size: rule.int().min(5).max(100).default(10),
}),
response({
statusCode: 200,
content: rule.array({
id: rule.int(),
name: rule.string(),
age: rule.int().nullable(),
}),
}),
],
action: async (ctx) => {
const { page, size } = ctx.query;
const users = await logic.getUsers(page, size);
ctx.send(users);
}
});
这...是要我与bug做个了断?测试的KPI又无法达标了?
最离谱的是,导出的路由根本就不知道要用在哪里,只能挂一个中间件自动搜索路由,这让我损失了很多低级乐趣。
import { routers, WebApp } from '@aomex/web';
const app = new WebApp({
+ mount: [routers('./src/routers')]
});
app.listen(3000);
文档
写完接口,我刚想着怎么和前端同学对接的时候,它很不负责任地扔给我一个swagger插件,然后打算让我把地址发给那个同学,我并没有当回事。
import { swaggerUI } from '@aomex/swagger-ui';
import { generateOpenapi } from '@aomex/openapi';
import { WebApp, routers } from '@aomex/web';
const app = new WebApp({
mount: [
+ swaggerUI({
+ openapi: () => generateOpenapi({ routers: './src/routers' }),
+ }),
routers('./src/routers'),
],
});
app.listen(3000);
不过就是生成了一个http://localhost:3000/swagger文档地址?就这?下次再不搞个好看点的UI插件,看我怎么揍死你😠
请求服务
该死,前端同学说swagger的UI太丑,没有打开看的欲望,我也是服了,抠抠搜搜地掏出一个不要钱的请求服务库悄悄给前端同学装上
// openapi.config.ts
import { defineConfig } from 'foca-openapi';
export default defineConfig({
path: 'http://localhost:3000/swagger/openapi.json',
classMode: 'rpc-group',
});
然后免费帮他执行了一下指令
npx openapi
他就可以放心地使用了。要不是领导在催进度,我才懒得管这事
指令
所谓的指令,不知道的还以为是在写接口,偶尔接收一下参数,简直就是废物
import { rule } from '@aomex/core';
import { Commander, options } from '@aomex/console';
export const commander = new Commander();
commander.create('say:hello', {
docs: { summary: '打招呼' },
mount: [
options({
name: rule.string().default('World'),
}),
],
action: (ctx) => {
const { name } = ctx.options;
console.log(`Hello ${name}`);
},
});
也没告诉我写完咋执行,真的是菜得不要不要的。还要我自己先看看帮助指令
npx aomex -h
朕知道了,退下吧!
npx aomex say:hello
Hello World
又是特么的hello world,每天学习新编程语言都hello吐了🤮。我要hello,树先生!
npx aomex say:hello -h
安排
npx aomex say:hello --name ",树先生!"
等等!我真是服了,这显示的帮助信息居然是中文,这太不国际范了吧?以后还怎么装逼。
import { commanders, ConsoleApp } from '@aomex/console';
const app = new ConsoleApp({
+ language: 'en_US',
mount: [commanders('./src/commanders')],
});
const code = await app.run();
process.exit(code);
你小子挺会玩...这次先放过你。
定时任务
我不喜欢直接跟人打招呼,所以这个招呼如果非打不可,那么可以等我离开后再放出来吗?嗖~又特么扔给我个什么插件?
import { rule } from '@aomex/core';
import { Commander, options } from '@aomex/console';
import { cron } from '@aomex/cron';
export const commander = new Commander();
commander.create('say:hello', {
docs: { summary: '打招呼' },
mount: [
+ cron({ minute: '*/5', args: ['树先生'] }),
+ cron({ month: '5,11', args: ['牛夫人'] }),
+ cron({ second: '*/2', args: ['小甜甜'] }),
options({
name: rule.string().default('World'),
}),
],
action: (ctx) => {
const { name } = ctx.options;
console.log(`Hello ${name}`);
},
});
我走了,开始打招呼吧
npx aomex cron:start
真他娘的人才,小甜甜每隔2秒钟问候一次,牛夫人半年才问候一次。别说我认识你这个负心汉。
我看看你还跟谁打招呼了:
# npx aomex cron:eject
*/5 * * * * aomex say:hello 树先生
* * * 5,11 * aomex say:hello 牛夫人
*/2 * * * * * aomex say:hello 小甜甜
仓库
服了,讲这么久还没告诉我项目地址。
github.com/aomex/aomex
文档是不是也没写?哦,写了,当我没问
aomex.js.org