快来玩玩便捷、高效的Demo练习场
Demo练习场
Vonajs 提供了一个 Demo 练习场的功能,允许我们非常方便、快捷的对代码做测试,对想法做验证
步骤
简而言之,Demo练习场的使用只需两步:第一步写代码,第二步执行终端命令。具体说明如下:
1. 新建demo文件
我们需要在项目中新建源码文件:src/backend/demo/index.ts。当前,我们并不需要手工创建此文件,而是执行以下命令,自动创建该文件:
$ npm run demo
2. 编写测试代码
在文件demo/index.ts中,我们写入测试代码:
export async function main(app: VonaApplication, _argv: IArgv) {
+ console.log('server listen: ', app.config.server.listen);
}
3. 执行demo文件
由于demo文件已经存在,再次执行同样的终端命令,就会自动加载此demo文件,并运行
$ npm run demo
更多例子
1. 模拟请求的上下文环境ctx
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:
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:
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. 模拟登录和退出登录
我们也可以模拟登录,然后执行业务逻辑,最后再退出登录
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框架固然费时费力,但是撰写技术文档更加费尽心思。写文档的过程同时也是再次梳理思路的过程,即便是围观,也有利于加深对框架设计的理解,探索不一样的架构设计路径。目前已完成部分文档,更多精彩正在逐步展开,欢迎参与
快来玩玩便捷、高效的Demo练习场的更多相关文章
- RabbitMQ和Kafka,更加便捷高效的消息队列使用方式,请放心食用
一.RabbitMQ实例介绍RabbitMQ实例由华为云分布式消息服务(DMS)团队打造,实例采用物理隔离的方式部署,租户独占RabbitMQ实例.一键式部署,完全兼容开源RabbitMQ的使用方式, ...
- gulp详细入门教程-gulp demo download
简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码 ...
- 如何写好demo——学习感悟
文章标题:教你如何写好Demo应用 如何制作出最有用的demo呢? 简,易 在demo中,我们要专注于单一的主题.我们的教学覆盖了很大的知识范围,因此,化整为零是非常必要的. 例如,我们要说明Andr ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...
- 简单的玩玩etimer <contiki学习笔记之九>
好吧,我承认etimer有点小复杂,主要是它似乎和contiki的process搅在一起,到处都在call_process.那就先搜搜contiki下的etimer的example看看,然后再试着写一 ...
- SQL调优学习之——sqlserver分页从低效到高效
背景 首先感谢网友@aixuexi 在评论中的提醒,原博文介绍的几种都不是最高效,现已修改加入另一种更高效的方法. 以前都是使用mysql和oracle,对sqlserver的使用不多.最近因项目原因 ...
- iClap助力移动互联网企业高效实现规范化管理
移动互联网的迅速崛起,智能移动客户端深刻而全面地影响着人类生活与工作习惯.而企业办公已从原始的纸张办公,到固定PC办公,跨入到一个应用范围更广.效率更高的移动办公时代.由静生动,让企业办公更加人性化和 ...
- WebAssembly 介绍
http://blog.csdn.net/zhangzq86/article/details/61195685 WebAssembly 的出现是不是意味着 Javascript 要完? https:/ ...
- WebAssembly,Web的新时代
在浏览器之争中,Chrome凭借JavaScript的卓越性能取得了市场主导地位,然而由于javascript的无类型特性,导致其运行时消耗大量的性能做为代价,这也是JavaScript的瓶颈之一.W ...
- 常见的序列化框架及Protobuf序列化原理
原文链接:https://www.jianshu.com/p/657fbf347934 https://www.cnblogs.com/javazhiyin/p/11375553.html https ...
随机推荐
- 使用Semantic Kernel框架和C#.NET 实现大模型Function Calling
最近研究Function Call,总结了一篇文章,分享给大家 一.GPT-4中实现函数调用功能 定义函数:首先,开发一个函数.例如,一个获取天气信息的函数可能如下: def get_current_ ...
- anaconda创建新环境
博客地址:https://www.cnblogs.com/zylyehuo/ anaconda创建新环境 conda create -n 环境自定义的名称 python=版本号 anaconda指定路 ...
- Oracle DB 关于CONNECT、RESOURCE 和DBA 角色权限
授予角色的语法: grant <object/system privilege> to <role name>; 一般情况下,在新建数据库用户后,都会习惯性的给用户授权CONN ...
- Linux性能分析-平均负载
平均负载的理解 一般系统变慢时,我们会使用top或uptime命令来查看下系统的负载情况 [root@localhost shell]# uptime 13:51:08 up 5 days, 21:5 ...
- Spring Boot的常用注解
在Spring Boot中,注解(Annotation)是核心特性之一,广泛用于配置和简化开发.以下是Spring Boot中一些常用的注解及其示例: 1. @SpringBootApplicatio ...
- object中的usemap是什么-HTML
<object> 标签中的 usemap 属性用于将嵌入的对象(如图像)与一个 图像映射(image map) 关联起来.图像映射允许你在图像的特定区域定义可点击的链接,用户点击这些区域时 ...
- pdf和图片的处理一记
python是非常好用的一门语言,因为它有很多别人封装好底层逻辑的库,我们只需要用简单的函数调用或者经过并不复杂的初始化过程即可.最近要投递简历,所以在处理简历的时候遇到一个问题,就是生成了一份pdf ...
- 使用java代码获取JVM信息
转载请注明出处: 最近在环境中定位服务问题,由于服务使用的docker部署的,且使用的docker镜像,在启动之后,容器内没有jdk相关的工具[jstat.jmap等等]:于是采用 在项目中使用jav ...
- wordpress插件开发时如何通过js调用图库/媒体选择器的问题
效果: 原文地址: wordpress插件开发通过js调用图库/媒体选择器的问题 - 搜栈网 (seekstack.cn)
- AI Agent现实应用与未来展望:从个人到社会的变革(下篇)
认知是成本最低的对冲. --张三思维进化论 从理论到实践:Agent技术落地的关键时刻 在前两篇文章中,我们探讨了AI Agent的概念认知和技术原理: 从"被动对话"到" ...