Skip to content
On this page

Nest.js总结

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]

待完善...