Nest.js总结

参考Nest中文文档

启动项目

全局安装Nest.js脚手架,然后利用脚手架创建一个新项目指令如下所示:

bash 复制代码
$ npm i -g @nestjs/cli

$ nest new my-project-name

要使用 TypeScript 的 更严格 功能集创建新项目,请将 --strict 标志传递给 nest new 命令。

如下所示:nest new [my-project-name] --strict


项目文件

打开刚刚创建的项目文件,展开如下图所示:

├── 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"


创建一个控制器

bash 复制代码
$ nest g controller [name]

要使用 CLI 创建控制器,只需执行 $ nest g controller [name] 命令即可。

为了避免生成测试文件,你可以传递 --no-spec 标志,如下所示:nest g resource [name] --no-spec

javascript 复制代码
// 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()。

状态码
javascript 复制代码
// 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';
  }
}
重定向
javascript 复制代码
// redirect.controller.ts
import { Controller, Get, Redirect } from '@nestjs/common';

@Controller('redirect')
export class NofoundController {
  @Get()
  @Redirect('/')
  redirectToNewRoute() {}
}

使用数据库

本地安装一个MySQL,然后启动数据库服务,为了方便演示,使用phpStudy这个集成环境;

在项目安装访问数据库的模块:

bash 复制代码
$ npm install --save @nestjs/typeorm typeorm mysql2

安装过程完成后,我们可以将 TypeOrmModule 导入到根 AppModule 中。

javascript 复制代码
// 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,使用环境变量传递,如下所示:

bash 复制代码
DATABASE_USER=root
DATABASE_PASSWORD=root
实现一个新增接口
javascript 复制代码
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',
      };
    }
  }
}
实现一个查询列表接口
javascript 复制代码
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

相关推荐
百思可瑞教育5 小时前
在Vue项目中Axios发起请求时的小知识
前端·javascript·vue.js·北京百思教育
患得患失9495 小时前
【个人项目】【前端实用工具】OpenAPI to TypeScript 转换器
前端·javascript·typescript
大前端helloworld5 小时前
前端梳理体系从常问问题去完善-基础篇(html,css,js,ts)
前端·javascript·面试
良木林5 小时前
浅谈原型。
开发语言·javascript·原型模式
No喜欢吃香菜.6 小时前
node.js卸载并重新安装(超详细图文步骤)
node.js
qq_12498707536 小时前
基于node.js+vue的医院陪诊系统的设计与实现(源码+论文+部署+安装)
前端·vue.js·node.js·毕业设计
百思可瑞教育7 小时前
Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案
前端·javascript·vue.js·缓存·uni-app·北京百思可瑞教育
草梅友仁7 小时前
草梅 Auth 1.7.0 发布 Demo 模式 | 2025 年第 37 周草梅周报
开源·node.js·github
木心操作8 小时前
js生成excel表格进阶版
开发语言·javascript·ecmascript
GISer_Jing8 小时前
sqb&ks二面(准备)
前端·javascript·面试