快来玩玩便捷、高效的Demo练习场

Demo练习场

Vonajs 提供了一个 Demo 练习场的功能,允许我们非常方便、快捷的对代码做测试,对想法做验证

步骤

简而言之,Demo练习场的使用只需两步:第一步写代码,第二步执行终端命令。具体说明如下:

1. 新建demo文件

我们需要在项目中新建源码文件:src/backend/demo/index.ts。当前,我们并不需要手工创建此文件,而是执行以下命令,自动创建该文件:

bash 复制代码
$ npm run demo

2. 编写测试代码

在文件demo/index.ts中,我们写入测试代码:

diff 复制代码
export async function main(app: VonaApplication, _argv: IArgv) {
+  console.log('server listen: ', app.config.server.listen);
}

3. 执行demo文件

由于demo文件已经存在,再次执行同样的终端命令,就会自动加载此demo文件,并运行

bash 复制代码
$ npm run demo

更多例子

1. 模拟请求的上下文环境ctx

diff 复制代码
export async function main(app: VonaApplication, _argv: IArgv) {
+  await app.bean.executor.mockCtx(async () => {
+    // do something in ctx
+  });
}
  • app.bean: 全局ioc容器
  • app.bean.executor: 从ioc容器获取全局bean实例executor。executor提供一组工具方法,其中,mockCtx用于创建一个模拟的上下文环境ctx

2. 访问Api

比如我们访问首页 Api:

diff 复制代码
export async function main(app: VonaApplication, _argv: IArgv) {
  await app.bean.executor.mockCtx(async () => {
+    const homeBody = await app.bean.executor.performAction('get', '//');
+    console.log(homeBody); // Hello Vona!
  });
}
  • performAction用于直接访问Api,method参数和path参数都支持类型提示

我们也可以模拟中文的 ctx,然后访问首页 Api:

diff 复制代码
export async function main(app: VonaApplication, _argv: IArgv) {
  await app.bean.executor.mockCtx(async () => {
+    const homeBody = await app.bean.executor.performAction('get', '//');
+    console.log(homeBody); // 您好, Vona!
+  }, { locale: 'zh-cn' });
}

3. 模拟登录和退出登录

我们也可以模拟登录,然后执行业务逻辑,最后再退出登录

diff 复制代码
export async function main(app: VonaApplication, _argv: IArgv) {
  await app.bean.executor.mockCtx(async () => {
+    // signin as user: admin
+    await app.bean.passport.signinMock();
+    // do something
+    // signout
+    await app.bean.passport.signout();
  });
}

结语

Vonajs已开源:https://github.com/vonajs/vona

Vonajs作者正在B站直播撰写技术文档,工作日每晚8:30,欢迎围观:濮水代码

开发一个功能完备的Nodejs框架固然费时费力,但是撰写技术文档更加费尽心思。写文档的过程同时也是再次梳理思路的过程,即便是围观,也有利于加深对框架设计的理解,探索不一样的架构设计路径。目前已完成部分文档,更多精彩正在逐步展开,欢迎参与

相关推荐
Flynt2 小时前
SvelteKit 3 升级实录:sv migrate 改完 6 个源文件,还给我留了张任务清单
typescript·前端框架·svelte
光影少年2 天前
Taro 是如何解析入口配置 app.config.ts 和页面配置的?
微信小程序·小程序·typescript·reactjs·百度小程序·taro
AI情绪识别开源2 天前
HFpEF 心房-心室耦联效率无创监测方向(AVCEI)
typescript·laravel·perl
凤城老人3 天前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
zhousenshan4 天前
TypeScript 入门到精通
typescript
花旗蜕变4 天前
前端转 NestJS 全栈实践:从表单页面到微信业务系统
前端·typescript·nestjs
艺杯羹4 天前
Anthropic突袭发布Claude Code Mods!用TypeScript编写智能体中间件:告别AI误删与失控
人工智能·typescript·系统架构
FYKJ_20107 天前
SSM校园失物招领系统41452-计算机课程设计、毕业设计
java·vue.js·spring boot·python·mysql·typescript·spark
tiankongdeyige7 天前
游戏战斗系统学习第2篇:有限状态机 (FSM)
学习·游戏·typescript
FYKJ_20108 天前
django电影推荐系统55066-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django