快来玩玩便捷、高效的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 ...
随机推荐
- useSyncExternalStore 的应用
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:修能 学而不思则罔,思而不学则殆 . --- <论语 ...
- Redis 原理 - String
String 数据结构 首先我来看下, Redis 中 String 的数据结构: 我们称之为 SDS (Simple Dynamic String) 简单动态字符串 struct sdshdr { ...
- 【Linux】3.7 定时任务调度
3.7定时任务调度 1. 任务调度原理 crond任务调度:crontab进行定时任务调度 使用方法:crontab [选项] crontab [选项] -e:编辑crontab定时任务 -i:查询c ...
- 学习unigui【27】像pg的jsonb一样编辑json。
var I: Integer; CurrentObject: TJSONObject; FieldName: string; Pair: TJSONPair;function CreateJS ...
- 谷歌SRE的7条原则
谷歌SRE的7条原则 拥抱合理的风险 最大化系统的稳定性不仅毫无意义,而且会适得其反.不切实际的可靠性目标限制了新功能交付给用户的速度,而且用户通常不会注意到极端的可用性(比如99.99999%),因 ...
- ubuntu 22.04安装harbor
一.概述 Harbor 是一个企业级的云原生容器镜像仓库,由 VMware 开发并贡献给 Cloud Native Computing Foundation (CNCF).它在传统的 Docker R ...
- EFCore-CodeFirst-Mysql 创建ConsoleApplication 程序
1.创建一个ConsoleApplication,程序集选择.NET5.:添加对应的依赖 2.添加对应的类Student.Course.Classes using System; using Syst ...
- Python基础 - 序列结构
有序序列: 列表.元组.字符串 无序序列: 字典.集合 可变序列: 列表.字典.集合 不可变序列: 元组.字符串 基本涉及功能: 增.删.查.改 列表:升级版数组 特点: 支持双向索引 包含若干元素的 ...
- JavaScript编程艺术:掌门人的代码之道
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- SpringBoot 在IDEA中用MAVEN打包报错
今天在打包的时候遇到一个报错,项目可以正常运行但是就是无法使用MAVEN 的insert和package进行打包 报错如下 [ERROR] Tests run: 1, Failures: 0, Err ...