📜  nestjs 版本 - Javascript (1)

📅  最后修改于: 2023-12-03 14:44:34.118000             🧑  作者: Mango

NestJS 版本 - JavaScript

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