likes
comments
collection
share

深入理解Nest.js模块:从基础到实战

作者站长头像
站长
· 阅读数 62

深入理解Nest.js模块:从基础到实战

引言

在上一节课中,我们成功安装并运行了Nest.js应用,并在浏览器中看到“Hello World”的输出。本节课将深入探讨Nest.js的模块概念及其应用,帮助你理解并运用Nest.js的核心模块化架构。

Hello World从哪里来

首先,我们回顾一下启动代码,了解"Hello World"是如何在浏览器中呈现的。

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000, () => {
    console.log('127.0.0.1:3000');
  });
}

bootstrap();

探索AppModule

接下来,我们看看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 {}

分析AppController

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();
  }
}

服务逻辑在AppService

最终,我们找到app.service.ts中的服务逻辑:

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

我们可以修改字符串,然后观察浏览器的变化,验证我们的修改是否生效。

创建新控制器

照猫画虎,按照同样的方法,我们创建一个新的控制器。

  1. 新建文件src/user.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller()
export class UserController {
  @Get('/user')
  getHello(): string {
    return 'my nest user';
  }
}
  1. 修改app.module.ts,将新的控制器添加进去:
js复制代码import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { UserController } from './user.controller';
import { AppService } from './app.service';

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

访问新的路由

启动服务器后,访问http://localhost:3000/user,你将看到输出“my nest user”。

模块化设计的重要性

在Nest.js中,通过在控制器前添加@Get('/user')注解,可以定义路由。然而,单纯依靠这种方法管理大型应用并不规范。Nest.js采用模块(Module)的概念,帮助开发者更好地组织和管理代码。

import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';

@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

@Module()装饰器接受以下参数:providerscontrollersimportsexports。详情请参考官方文档,本次课程暂不详细了解,之后也会进一步学习。

结语

通过本节内容,你不仅了解了Nest.js模块的基础知识,还学会了如何创建并管理自己的控制器和模块。模块化设计是Nest.js的核心理念,它使得大型应用的开发和维护更加高效和简洁。

转载自:https://juejin.cn/post/7379963420118990885
评论
请登录