返回

Nest.js 深入浅出:打造 todo-demo (CRUD) 应有之义

后端

Nest.js 深入浅出教程:从基础到实践

准备工作

踏入 Nest.js 的开发之旅,需要具备以下环境:

  • Node.js
  • npm
  • Nest.js CLI(通过 npm 安装:npm install -g @nestjs/cli

创建项目

使用 Nest.js CLI 创建一个新项目:

nest new todo-demo

项目结构

Nest.js 项目有着清晰的结构:

  • src:源代码目录
  • node_modules:第三方库目录
  • package.json:项目配置文件
  • .gitignore:Git 忽略文件

路由设置

Nest.js 采用装饰器定义路由。例如,在 src/app.controller.ts 文件中:

@Controller('todo')
export class AppController {
  @Get()
  findAll() { ... }
  @Post()
  create(@Body() body) { ... }
}

数据库交互

Nest.js 集成 TypeORM 用于数据库交互。在 src/app.module.ts 中:

@Module({
  imports: [TypeOrmModule.forRoot({ ... })],
})
export class AppModule {}

Docker 部署

为了简化部署,可以使用 Docker。在项目根目录创建 Dockerfile

FROM node:16
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]

项目实战

创建 Todo 实体

src/todo/todo.entity.ts 中:

@Entity()
export class Todo {
  @PrimaryGeneratedColumn()
  id: number;
  @Column()
  title: string;
  @Column()
  description: string;
  @Column()
  completed: boolean;
}

创建 Todo 服务

src/todo/todo.service.ts 中:

@Injectable()
export class TodoService {
  constructor(@InjectRepository(Todo) private todoRepository: Repository<Todo>) {}

  async findAll() { ... }
  async create(todo: Todo) { ... }
  async update(id: number, todo: Todo) { ... }
  async delete(id: number) { ... }
}

创建 Todo 控制器

src/todo/todo.controller.ts 中:

@Controller('todo')
export class TodoController {
  constructor(private todoService: TodoService) {}

  @Get()
  async findAll() { ... }
  @Post()
  async create(@Body() todo: Todo) { ... }
  @Patch(':id')
  async update(@Param('id') id, @Body() todo: Todo) { ... }
  @Delete(':id')
  async delete(@Param('id') id) { ... }
}

结语

本教程带领你深入浅出地了解 Nest.js 的开发。通过掌握这些技巧,你可以构建自己的 CRUD 应用。有任何疑问或建议,欢迎留言。

常见问题解答

  1. 为什么选择 Nest.js?

    • 模块化、可扩展性、健壮的性能。
  2. 如何安装 Nest.js CLI?

    • npm install -g @nestjs/cli
  3. 如何创建 TypeORM 实体?

    • 使用 @Entity() 装饰器。
  4. 如何使用 Docker 部署 Nest.js 项目?

    • 创建 Dockerfile 并构建镜像。
  5. 如何为 Todo 实体定义属性?

    • 使用 @Column() 装饰器。