深入理解Nest.js模块:从基础到实战
深入理解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!';
}
}
我们可以修改字符串,然后观察浏览器的变化,验证我们的修改是否生效。
创建新控制器
照猫画虎,按照同样的方法,我们创建一个新的控制器。
- 新建文件
src/user.controller.ts
:
import { Controller, Get } from '@nestjs/common';
@Controller()
export class UserController {
@Get('/user')
getHello(): string {
return 'my nest user';
}
}
- 修改
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()
装饰器接受以下参数:providers
、controllers
、imports
、exports
。详情请参考官方文档,本次课程暂不详细了解,之后也会进一步学习。
结语
通过本节内容,你不仅了解了Nest.js模块的基础知识,还学会了如何创建并管理自己的控制器和模块。模块化设计是Nest.js的核心理念,它使得大型应用的开发和维护更加高效和简洁。
转载自:https://juejin.cn/post/7379963420118990885