首页 文章 精选 留言 我的

精选列表

搜索[nest],共482篇文章
优秀的个人博客,低调大师

nest.js 6.9.0 发布,node.js 增长最快的框架

特征 common:添加class-transformerexcludeExtraneousValues标志#3278 通用:添加applyDecorators功能#3113 常见的:添加CacheTTL()装饰器#2943 核心:添加@Ip()装饰器#3249 核心:添加getUrl()函数#3147 微服务/ WebSockets:支持createParamDecorator(自定义装饰器) Bug修复 核心:修复请求范围链中的临时提供程序#3303 微服务:修复应用虚假选项(例如,noAck针对RMQ)

优秀的个人博客,低调大师

Nest.js 更优雅的 TS 控制反转策略 - 依赖查找

一、Cabloy5.0内测预告 Cabloy5.0采用TS对整个全栈框架进行了脱胎换骨般的大重构,并且提供了更加优雅的ts控制反转策略,让我们的业务开发更加快捷顺畅 1. 新旧技术栈对比: 后端 前端 旧版 js、egg2.0、mysql js、vue2、framework7 新版 ts、egg3.0、多数据库兼容(支持mysql、postgresql) ts、vue3、quasar 2. 框架开发两大趋势 TS化:这是显而易见的趋势,不必赘言 ESM化:从目前趋势看,前端框架已经全链路ESM化了,但是,大多数后端框架仍然是Commonjs。即便是egg3.0也仍然是Commonjs。由于egg的定位仍然是元框架,CabloyJS5.0在egg基础上仍然开发出了全量ESM化的业务模块化系统(在Commonjs之上进行ESM化的具体机制是什么,另有文章阐述) 二、比nestjs更优雅的ts控制反转策略 基于TS的后端框架一般都会提供依赖容器,实现控制反转。控制反转有两种策略:依赖注入和依赖查找。CabloyJS5.0同时支持依赖注入和依赖查找,并且通过模块范围的辅助,让依赖查找的代码更加简洁高效,下面挑几个特性举例说明: Service服务 Config配置 多语言 错误异常 三、Service服务 1. 创建一个Service 在CabloyJS中,local bean相当于nestjs中service的概念,下面创建一个local bean import { BeanBase, Local } from '@cabloy/core'; import { ScopeModule } from '../resource/this.js'; @Local() export class LocalHome extends BeanBase<ScopeModule> { async echo({ user: _user }) { return `Hello World!`; } } 通过@Local声明LocalHome是一个local bean LocalHome继承自基类BeanBase 2. Service的依赖注入 接下来,在Controller中采用依赖注入的方式来使用LocalHome import { BeanBase, Controller, Use } from '@cabloy/core'; import { ScopeModule } from '../resource/this.js'; import { LocalHome } from '../local/home.js'; @Controller() export class ControllerHome extends BeanBase<ScopeModule> { @Use() home: LocalHome; async echo() { const res = await this.home.echo({ user: this.ctx.state.user.op, }); this.ctx.success(res); } } 使用@Use注入LocalHome 3. Service的依赖查找 接下来,在Controller中采用依赖查找的方式来使用LocalHome import { BeanBase, Controller } from '@cabloy/core'; import { ScopeModule } from '../resource/this.js'; @Controller() export class ControllerHome extends BeanBase<ScopeModule> { async echo() { const res = await this.scope.local.home.echo({ user: this.ctx.state.user.op, }); this.ctx.success(res); } } 不需要导入LocalHome,直接在代码中使用this.scope.local来访问容器中的local bean实例 看一下动画演示,提供了完整的类型智能提示: 四、Config配置 1. 定义Config 可以为业务模块单独定义一些Config配置,如下: import { CabloyApplication } from '@cabloy/core'; export const config = (_app: CabloyApplication) => { return { + prompt: 'hello world', }; }; 2. 使用Config 可以在LocalHome中直接使用刚才定义的config import { BeanBase, Local } from '@cabloy/core'; import { ScopeModule } from '../resource/this.js'; @Local() export class LocalHome extends BeanBase<ScopeModule> { async echo({ user: _user }) { + return this.scope.config.prompt; - return `Hello World!`; } } 不需要导入任何类型,直接在代码中使用this.scope.config来访问当前业务模块中的config配置 看一下动画演示,提供了完整的类型智能提示: 五、多语言 1. 定义语言资源 可以为业务模块定义语言资源,比如,这里分别定义英文和中文两种语言资源 英文 export default { HelloWorld: 'Hello World', }; 中文 export default { HelloWorld: '您好世界', }; 2. 使用语言资源 可以在LocalHome中直接使用刚才定义的语言资源 import { BeanBase, Local } from '@cabloy/core'; import { ScopeModule } from '../resource/this.js'; @Local() export class LocalHome extends BeanBase<ScopeModule> { async action({ user: _user }) { + // 自动判断当前语言 + const message = this.scope.locale.HelloWorld(); + // 强制使用英文资源 + const message1 = this.scope.locale.HelloWorld.locale('en-us'); + // 强制使用中文资源 + const message2 = this.scope.locale.HelloWorld.locale('zh-cn'); + return `${message}:${message1}:${message2}`; - return this.scope.config.prompt; } } 不需要导入任何类型,直接在代码中使用this.scope.locale来访问当前业务模块中的语言资源 看一下动画演示,提供了完整的类型智能提示: 六、错误异常 1. 定义错误码 可以为业务模块定义错误码 export enum Errors { + Error001 = 1001, } 这里定义了一个错误枚举类型Error001,对应的错误码是1001 2. 定义错误码对应的语言资源 可以为错误码定义语言资源,比如,这里分别定义英文和中文两种语言资源 英文 export default { + Error001: 'This is a test', HelloWorld: 'Hello World', }; 中文 export default { + Error001: '这是一个错误', HelloWorld: 'Hello World', }; 3. 抛出错误异常 可以在LocalHome中直接使用刚才定义的错误枚举值,并抛出异常 import { ScopeModule } from '../resource/this.js'; @Local() export class LocalHome extends BeanBase<ScopeModule> { async action({ user: _user }) { + // 直接抛出异常 + this.scope.error.Error001.throw(); - return this.scope.config.prompt; } } 不需要导入任何类型,直接在代码中使用this.scope.error来访问当前业务模块中的错误枚举值 看一下动画演示,提供了完整的类型智能提示: 六、后记 Cabloy4.0中就已经提供了大量业务能力,比如:工作流引擎、表单引擎、权限引擎、字段权限、多级缓存、模块化体系、分布式架构、多租户引擎,等等。随着Cabloy5.0 Typescript的赋能,这些业务能力也随之有了全新的表现 欲了解更多,请关注每晚8点B站直播:濮水代码

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册