手摸手带你搭建博客后台(二)后端搭建

207 阅读1分钟

前言

上一章我们把后台管理系统的前端搭建完成,此章节我们用nestjs完成后端的搭建。

初始化项目

  • 全局安装@nestjs/cli

    npm i -g @nestjs/cli

  • 创建项目

    nest new wy-blog-nest

    然后我选择 pnpm 安装项目

    image.png

  • 启动项目

    pnpm start:dev

    image.png

    image.png

    项目启动成功。

  • 项目初始化目录

    初始化项目结构如下:

    image.png

然后,我们可以按照上一章需要安装lint-stagedhusky等。

初始nestjs

  • main.ts

    main.ts是项目的入口文件,我们从这里看起:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

这里我使用CodeGeeX帮我解析这段的含义: image.png

这里我们主要需要知道NestFactoryAppModule

  • 模块

    我们查看app.module.ts根模块代码:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

模块是用 @Module() 装饰器注释的类。它主要包含四个属性: image.png

要使用 CLI 创建模块,只需执行 $ nest g module user 命令即可。

  • 控制器

    我们查看app.controller.ts代码:

    import { Controller, Get } from '@nestjs/common';
    import { AppService } from './app.service';
    
    @Controller()
    export class AppController {
      constructor(private readonly appService: AppService) {}
    
      @Get()
      getHello(): string {
        return this.appService.getHello();
      }
    }
    

    image.png 控制器负责处理传入请求并向客户端返回响应。

    这里@Controller()没有指定路由前缀,我们访问http://localhost:3000/ 得到结果,现在我们修改为@Controller('app'),刷新页面404了:

    image.png

    这是因为我们加了路由前缀app,我们访问http://localhost:3000/app image.png

    getHello()之前的@Get() 是HTTP 请求方法装饰器。

    @Controller()@Get()组成路由路径。这是什么意思?

    我们接着修改@Get()@Get('getHello'),这时候我们访问http://localhost:3000/app/getHello 才能得到结果。

    对于其他配置可以看官网进行学习 nest.nodejs.cn/controllers

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

  • 提供器

    nest.nodejs.cn/providers 查看官网了解提供器,这里我们拿服务学习app.service.ts

    image.png

    要使用 CLI 创建服务,只需执行 $ nest g service cats 命令即可

总结

这节我们初始化了项目,了解了nestjs中的模块、控制器和服务,下节我们开始实战以user为例开始开发。