📅  最后修改于: 2023-12-03 14:44:34.118000             🧑  作者: Mango
NestJS 是一个用于构建高度模块化、可伸缩且易于维护的 Node.js 应用程序的框架。它由 TypeScript 编写,但是完全支持 JavaScript。NestJS 提供了许多开箱即用的功能,包括依赖注入、模块化、可测试性和可扩展性。
安装 NestJS 的方法很简单,使用 npm:
$ npm i @nestjs/core
创建一个新的 NestJS 应用程序很容易。只需在项目的根目录下创建一个 src
目录,然后创建一个 main.ts
文件:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
注意:这里使用了 TypeScript。
接下来是 app.module.ts
文件的内容:
import { Module } from '@nestjs/common';
@Module({})
export class AppModule {}
这是应用程序的主要模块,它是一个空模块。我们将在该文件中添加其他模块和插件。
现在,我们可以运行应用程序了:
$ node src/main.js
应用程序将在端口 3000 上监听请求。
控制器和路由是在 NestJS 应用程序中处理 HTTP 请求的组件。我们可以使用 NestJS CLI 来创建一个新的控制器:
$ nest g controller cats
这将在 src/cats
目录下创建一个名为 cats.controller.ts
的文件,其内容如下:
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
这个控制器有一个路由,可以处理 GET /cats
请求。可以使用 @Get()
装饰器来定义该路由。
我们还需要将 CatsController
添加到我们的 AppModule
中:
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
@Module({
controllers: [CatsController],
})
export class AppModule {}
现在,我们可以使用 curl
命令来测试该路由:
$ curl http://localhost:3000/cats
This action returns all cats
NestJS 提供了强大的依赖注入系统,它使我们可以轻松地管理应用程序中的各种组件。例如,我们可以使用 @Injectable()
装饰器来定义一个可注入的服务:
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: string[] = [];
create(name: string) {
this.cats.push(name);
}
findAll(): string[] {
return this.cats;
}
}
现在我们可以将该服务注入到我们的控制器中:
import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
findAll(): string[] {
return this.catsService.findAll();
}
}
CatsController
中的构造函数接收一个 CatsService
实例,并将其存储在 catsService
属性中。现在我们可以在控制器中使用该服务了。
为了使 NestJS 容器知道如何创建 CatsService
,我们需要将其添加到 providers
数组中:
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class AppModule {}
providers
数组中应包含应用程序中可注入的所有服务。
以上是 NestJS 中的一些基础用法。NestJS 具有许多其他功能,例如 WebSocket 和 GraphQL 支持。您可以访问官方文档以了解更多:https://docs.nestjs.com。