使用NestJS开发Node.js应用的方法

我来讲解使用 NestJS 开发 Node.js 应用的方法完整攻略。

总体概述

什么是 Nest?

Nest 是一个基于 Express,Fastify 的框架,用来构建优雅的、可拓展的应用程序。

为什么选择 Nest?

  • 基于 Typescript,拥有更好的类型安全和代码可读性
  • 支持依赖注入 (DI)
  • 可以很容易地整合第三方库
  • 可以使用与 Angular 相同的装饰器语法声明模块和控制器
  • 注重模块化设计,易于维护和拓展

安装 Nest

Nest 官方提供了命令行工具 @nestjs/cli,可以帮助我们快速创建一个 Nest 应用。

npm i -g @nestjs/cli
nest new project-name

安装 Nest 后,我们可以使用 nest new 命令创建新项目,这样会自动帮我们安装好必要的依赖和配置文件。

创建 Controller 和 Service

创建 Controller

在 Nest 应用中,Controller 负责处理 HTTP 请求以及响应。使用 @Controller() 装饰器可以声明一个 Controller。

import { Controller, Get } from '@nestjs/common';

@Controller('hello')
export class HelloController {
  @Get()
  sayHello(): string {
    return 'Hello Nest!';
  }
}

在上面的例子中,我们声明了一个名为 HelloController 的 Controller,并把路由路径设为 /hello。在 sayHello 方法中,我们返回了一个字符串 'Hello Nest!'

创建 Service

在 Nest 应用中,Service 可以用来实现业务逻辑,并将其注入到 Controller 中使用。使用 @Injectable() 装饰器可以声明一个 Service。

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

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

在上面的例子中,我们声明了一个名为 HelloService 的 Service,并在其中实现了一个名为 getHello 的方法。

注册 Controller 和 Service

注册 Controller

在 Nest 应用中,可以使用 @Module() 装饰器声明一个模块。与模块相关联的 Controller 和 Service 可以在 @Module() 装饰器中进行注册和引入。

import { Module } from '@nestjs/common';
import { HelloController } from './hello.controller';

@Module({
  controllers: [HelloController],
})
export class HelloModule {}

在上面的例子中,我们声明了一个名为 HelloModule 的 Module,并注册了我们之前声明的 HelloController

注册 Service

与注册 Controller 类似,我们可以在 @Module() 装饰器的 providers 属性中注册 Service。

import { Module } from '@nestjs/common';
import { HelloController } from './hello.controller';
import { HelloService } from './hello.service';

@Module({
  controllers: [HelloController],
  providers: [HelloService],
})
export class HelloModule {}

在上面的例子中,我们将之前声明的 HelloService 注册到了 HelloModule 中。

示例

下面是一个创建了一个简单的 API 并使用 MongoDB 存储数据的 Nest 应用示例。

第一步:创建新应用

首先,我们使用 Nest CLI 创建新应用,并安装 Express 和 Mongoose 依赖。

nest new nest-mongoose-sample
cd nest-mongoose-sample
npm i express mongoose

第二步:连接 MongoDB

app.module.ts 中导入 Mongoose 模块并连接 MongoDB 数据库。

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

@Module({
  imports: [MongooseModule.forRoot('mongodb://localhost/nest-mongoose-sample')],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

在上面的例子中,我们导入了 Mongoose 模块,并使用 MongooseModule.forRoot 方法连接了 MongoDB 数据库 (mongodb://localhost/nest-mongoose-sample)。

第三步:创建 Model

在 Nest 应用中,我们可以使用 @Schema()@Prop() 装饰器来声明一个 Mongoose Model。

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

@Schema()
export class Cat extends Document {
  @Prop()
  name: string;

  @Prop()
  age: number;

  @Prop()
  breed: string;
}

export const CatSchema = SchemaFactory.createForClass(Cat);

在上面的例子中,我们声明了一个名为 Cat 的 Mongoose Model,包含了三个字段:nameagebreed

第四步:创建 Controller 和 Service

我们创建了一个名为 cat.service.ts 的 Service,并使用 Mongoose 实现了增删改查等方法。

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Cat, CatDocument } from './cat.schema';

@Injectable()
export class CatService {
  constructor(@InjectModel(Cat.name) private catModel: Model<CatDocument>) {}

  async create(cat: Cat): Promise<Cat> {
    const createdCat = new this.catModel(cat);
    return createdCat.save();
  }

  async findAll(): Promise<Cat[]> {
    return this.catModel.find().exec();
  }

  async findOne(id: string): Promise<Cat> {
    return this.catModel.findById(id).exec();
  }

  async delete(id: string): Promise<Cat> {
    return this.catModel.findByIdAndDelete(id).exec();
  }
}

在上面的例子中,我们使用 @InjectModel 装饰器在 Service 中注入了 Cat Model。然后实现了 createfindAllfindOnedelete 等方法。

我们创建了一个名为 cat.controller.ts 的 Controller,并调用 CatService 中的方法。

import { Controller, Get, Post, Body, Param, Delete } from '@nestjs/common';
import { CatService } from './cat.service';
import { Cat } from './cat.schema';

@Controller('cat')
export class CatController {
  constructor(private readonly catService: CatService) {}

  @Post()
  create(@Body() cat: Cat): Promise<Cat> {
    return this.catService.create(cat);
  }

  @Get()
  findAll(): Promise<Cat[]> {
    return this.catService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string): Promise<Cat> {
    return this.catService.findOne(id);
  }

  @Delete(':id')
  delete(@Param('id') id: string): Promise<Cat> {
    return this.catService.delete(id);
  }
}

在上面的例子中,我们使用 @Body()@Param() 装饰器分别提取请求参数和路径参数,并调用 CatService 中的方法。

第五步:注册 Controller 和 Service

最后,在 app.module.ts 中注册 CatControllerCatService

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { Cat, CatSchema } from './cat.schema';
import { CatController } from './cat.controller';
import { CatService } from './cat.service';

@Module({
  imports: [MongooseModule.forRoot('mongodb://localhost/nest-mongoose-sample'), MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }])],
  controllers: [CatController],
  providers: [CatService],
})
export class AppModule {}

在上面的例子中,我们注册了 CatControllerCatService。使用 MongooseModule.forFeature 方法注册了 Cat Model。

现在,可以使用下面的命令运行该应用。

npm run start:dev

访问 http://localhost:3000/cat 即可看到 API 的返回数据。

以上就是使用 NestJS 开发 Node.js 应用的详细攻略,希望可以帮到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用NestJS开发Node.js应用的方法 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • bitronix 连接 MySQL 出现MySQLSyntaxErrorException 的解决方法

    下面是“bitronix 连接 MySQL 出现 MySQLSyntaxErrorException 的解决方法”的攻略。 问题背景 在使用 bitronix 连接 MySQL 时,可能会遇到 MySQLSyntaxErrorException 错误,这个错误通常显示为语法错误。这是因为在使用 bitronix 的时候,可能会出现一些配置问题或者代码问题。 …

    database 2023年5月21日
    00
  • SQL使用复合索引实现数据库查询的优化

    SQL使用复合索引实现数据库查询的优化是非常重要的技能之一。下面我将为您介绍一些关于如何使用复合索引来优化数据库查询的攻略。 什么是复合索引 复合索引也被称为多列索引,它是指在数据库表中多个列上创建的单个索引。对于复合索引,它们可以基于多个列来筛选数据,这使得可以通过单个查询操作来快速定位和访问数据,而无需对整个数据表进行遍历。 如何创建复合索引 下面是创建…

    database 2023年5月19日
    00
  • Linux 下mysql通过存储过程实现批量生成记录

    针对 “Linux 下mysql通过存储过程实现批量生成记录” 这个问题,以下是我的完整攻略,一共包含以下几个方面: 准备工作:安装 mysql 服务器和客户端; 创建存储过程代码:包括参数定义,循环语句,插入语句等; 测试存储过程:通过执行存储过程来生成指定数量的记录; 示例说明:给出两个具体的存储过程代码示例,包括生成随机数记录和生成 IP 地址记录。 …

    database 2023年5月22日
    00
  • mysql主键,外键,非空,唯一,默认约束及创建表的方法

    MySQL是一种非常流行的关系型数据库,主键、外键、非空、唯一和默认值是MySQL中常用的约束,以保证数据的准确性和完整性。下面将对这些约束及创建表的方法进行详细讲解。 MySQL主键 在MySQL中,主键是一种用于唯一标识表中每一条记录的字段或一组字段。每一张表都必须有一个主键,主键可以是单个字段或多个字段的组合。主键的值必须唯一,不允许为空。我们一般可以…

    database 2023年5月18日
    00
  • 创建动态MSSQL数据库表

    创建动态MSSQL数据库表的完整攻略如下: 1. 创建表 创建表需要用到以下SQL代码: CREATE TABLE {表名} ({列名1} {数据类型1}, {列名2} {数据类型2}, …); 其中,花括号内的内容需要替换成实际的表名、列名和对应数据类型。例如,创建一个名为”students”的表,包含”id”(整数类型)、”name”(字符串类型)和…

    database 2023年5月21日
    00
  • MySQL内存及虚拟内存优化设置参数

    MySQL内存及虚拟内存优化设置参数 MySQL的内存优化对于提高数据库的性能有着非常重要的作用。在进行优化设置时,需要考虑两个因素:内存和虚拟内存。以下是MySQL内存及虚拟内存优化的完整攻略: 1. 确定MySQL使用的内存总量 在进行MySQL的内存优化过程中,首先需要确定MySQL可以使用的内存总量。可以使用如下命令查看当前MySQL实例的内存使用情…

    database 2023年5月19日
    00
  • SQL错误:相关的信息为:用户 sa 登录失败。原因: 未与信任 SQL Server 连接相关联。

    这个错误信息表示用户 “sa” 尝试连接到 SQL Server 时登录失败,原因是该登录账户未与信任 SQL Server 连接相关联。这个错误通常出现在以下两种情况下: SQL Server 配置问题。 用户 “sa” 的登录账户没有足够的权限连接 SQL Server。 针对这个错误,建议按照以下步骤进行排查和修复: 确认 SQL Server 是否安…

    database 2023年5月21日
    00
  • Mysql数据库时间查询举例详解

    那我来为你详细讲解一下“Mysql数据库时间查询举例详解”的完整攻略。 Mysql数据库时间查询举例详解 在 Mysql 数据库中,我们经常需要查询不同时间段的数据,以满足我们业务上的需求。下面,我们详细介绍几种关于 Mysql 时间查询的方法,并且举例说明如何使用这些方法。 基本的时间查询方法 Mysql 中,我们可以使用 DATE、TIME、DATETI…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部