Nest.js总结
设计模式
IOC控制反转、DI依赖注入
控制反转是将程序的操作对象调用权交给容器(container),从而实现对象组件的装配和管理。其概念就是,将组件对象的控制权从程序代码本身转移到了外部容器(IoC)
依赖注入与控制反转概念是一样的,不同的是从另一个角度去看待。由IoC容器在运行期间动态地将某种依赖关系注入对象之中。
我们先看下未使用控制反转和依赖注入之前的代码:
ts
class A{
name:string
constructor(name:string){
this.name=name
}
}
class People{
name:string
constructor(name:string){
this.name=new A(name).name
}
}
const people=new People('小明')
console.log(people); // People { name: '小明' }
以上代码People类依赖于A类,是在People类内部主动创建依赖对象(A类),从而导致类与类之间高耦合(比如A类加了个age属性,则People类也需要在constructor中加入age属性)
接下来我们再来看看使用控制反转的代码:
ts
// IoC容器
class Container {
modules: any
constructor() { this.modules = {} }
// 在容器中注册类
provide(key: string, module: any){
this.modules[key] = module
}
// 获取容器中的类
get(key) {
return this.modules[key]
}
}
const ioc = new Container()
class A{
name:string
constructor(name:string){
this.name=name
}
}
// 通过IoC注入, 将程序的操作对象调用权交给容器---->控制反转
ioc.provide('a', new A('小明'))
class People {
a: any
// Prople类就可以通过IoC容器来使用A类中提供的变量和方法---->依赖注入
contructor(container: Container) {
this.a = container.get('a')
}
}
安装
全局安装Nest cli
sh
## npm
npm i -g @nestjs/cli
## yarn
yarn add global @nestjs/cli
使用
sh
## 创建项目
nest new project-name
## 启动项目
cd projecr-name
yarn
yarn start:dev
## 更多启动命令查看项目根目录下 package.json 文件
启动后可在浏览器打开http://localhost:3000/
查看项目是否启动
命令
sh
# 创建一个名为my-app的子应用
nest g app my-app
# 创建一个名为layout的库 (任何适合重用的功能都可以作为库来管理)
nest g lib layout
typeORM
sh
## 安装typeORM
yarn add typeorm --save
## 安装并在全局导入 import "reflect-metadata";
yarn add reflect-metadata --save
# 安装 node typings(以此来使用 Node 的智能提示):
yarn add @types/node --save
# 安装数据库驱动(以mysql为例)
yarn add mysql --save
dotenv
安装
sh
yarn add dotenv
配置.env
文件
sh
# main服务启动端口
app_main_port=65535
# main服务数据库地址
main_db_host=127.0.0.1
# main 数据库端口
main_db_port=3306
# main 数据库用户名
main_db_username=root
# main数据库密码
main_db_password=970825
# main 数据库名称
main_db_name= main_test
使用
ts
// 引入
import * as dotenv from 'dotenv'
// 访问属性
dotenv.config().parsed[attr]
待完善...