Nest.js总结
参考Nest中文文档
启动项目
全局安装Nest.js
脚手架,然后利用脚手架创建一个新项目指令如下所示:
$ npm i -g @nestjs/cli
$ nest new my-project-name
要使用 TypeScript 的 更严格 功能集创建新项目,请将 --strict 标志传递给 nest new 命令。
项目文件
打开刚刚创建的项目文件,展开如下图所示:
├── my-test
│ ├── src
│ │ ├── app.controller.spec.ts
│ │ ├── app.controller.ts
│ │ ├── app.module.ts
│ │ ├── app.service.ts
│ │ └── main.ts
│ ├── test
│ │ ├── app.e2e-spec.ts
│ │ └── jest-e2e.json
│ ├── package.json
│ ├── README.md
│ ├── tsconfig.json
│ ├── …
文件名 | 说明 |
---|---|
app.controller.spec.ts | 控制器的单元测试。 |
app.controller.ts | 具有单一路由的基本控制器。 |
app.module.ts | 应用的根模块。 |
app.service.ts | 具有单一方法的基本服务。 |
main.ts | 使用核心函数 NestFactory 创建 Nest 应用实例的应用入口文件。 |
test/* | 单元测试文件 |
启动项目需要热更新的可以运行指令
"start:dev"
。
创建一个控制器
$ nest g controller [name]
要使用 CLI 创建控制器,只需执行 $ nest g controller [name] 命令即可。
为了避免生成测试文件,你可以传递 --no-spec 标志,如下所示:nest g resource [name] --no-spec
// cats.controller.ts
import { Controller, Get, Post } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Post()
create(): string {
return 'This action adds a new cat';
}
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
Nest 为所有标准的 HTTP 方法提供装饰器:@Get()、@Post()、@Put()、@Delete()、@Patch()、@Options() 和 @Head()。
状态码
// code.controller.ts
import { Controller, HttpCode, Post } from '@nestjs/common';
@Controller('code')
export class CodeController {
@Post()
@HttpCode(204)
create() {
return 'This action adds a new cat';
}
}
重定向
// redirect.controller.ts
import { Controller, Get, Redirect } from '@nestjs/common';
@Controller('redirect')
export class NofoundController {
@Get()
@Redirect('/')
redirectToNewRoute() {}
}
使用数据库
本地安装一个MySQL,然后启动数据库服务,为了方便演示,使用phpStudy这个集成环境;
在项目安装访问数据库的模块:
$ npm install --save @nestjs/typeorm typeorm mysql2
安装过程完成后,我们可以将 TypeOrmModule 导入到根 AppModule 中。
// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
以上链接数据库的方式可通过配置
config
,使用环境环境变量传递;
创建一个新增接口
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { DataSource, Repository } from 'typeorm';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
private dataSource: DataSource,
) {}
async create(createUserDto: CreateUserDto) {
const { firstName, lastName, isActive } = createUserDto;
try {
await this.usersRepository
.createQueryBuilder('user')
.insert()
.into(User)
.values([{ firstName, lastName, isActive: !!Number(isActive) }])
.execute();
return {
code: '200',
data: '',
msg: 'success',
};
} catch (error) {
return {
code: 'E500',
data: JSON.stringify(error),
msg: 'error',
};
}
}
}
创建一个新增接口
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { DataSource, Repository } from 'typeorm';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
private dataSource: DataSource,
) {}
async findAll(): Promise<UserList> {
const data = await this.usersRepository
.createQueryBuilder('user')
.getMany();
return {
data,
code: '200',
msg: 'success',
};
}
}
}
使用数据源查阅TypeORM
原文地址:https://blog.csdn.net/qq_45272329/article/details/136546113
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!