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

yizhihongxing

我来讲解使用 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日

相关文章

  • 数据库阿里连接池 druid配置详解

    数据库阿里连接池 druid 配置详解 什么是 druid Druid 是阿里巴巴开源的一个数据库连接池、监控组件。 druid中维护了一个数据库连接池,并提供了一些监控统计和扩展功能。 Druid提供的功能: 数据库连接池 监控统计 扩展JDBC SQL注入检查:wall filter 大数据量低延时:PSCache 干扰SQL执行: stat filte…

    database 2023年5月22日
    00
  • Centos7 Redis主从搭建配置的实现

    下面是CentOS 7上 Redis主从搭建配置的实现攻略。 准备工作 1.安装必要的依赖 在终端中执行以下命令,安装需要的依赖: yum install gcc gcc-c++ kernel-devel 2.下载并安装Redis 在官网 https://redis.io/download 中下载最新版本的Redis,然后执行以下命令进行安装: tar xz…

    database 2023年5月22日
    00
  • 数据库日常维护常用的脚本概述及部分测试

    数据库日常维护常用的脚本概述及部分测试 引言 数据库是系统中的核心组成部分之一,为了保证系统业务的正常运行,需要对数据库进行日常维护。而数据库的日常维护常用的脚本都是非常重要的,本文将对数据库日常维护常用的脚本进行概述,并提供部分测试示例。 数据库常用的日常维护脚本 数据库备份脚本 数据库备份脚本是必不可少的日常维护脚本,他是保证数据库数据安全的最后一道防线…

    database 2023年5月18日
    00
  • 在Linux系统上安装数据库监控程序Bugzilla的方法

    下面是在Linux系统上安装数据库监控程序Bugzilla的方法的完整攻略。 安装步骤 1. 确认系统环境 首先需要确认系统环境是否满足Bugzilla的安装要求,需要的运行环境包括: Apache Web 服务器。 Perl 解译器。 MySQL 或 PostgreSQL 数据库。 可以使用以下命令确认Linux系统中是否已安装以上运行环境: # 确认 A…

    database 2023年5月22日
    00
  • MySQL 查询速度慢与性能差的原因与解决方法

    下面就来一步步讲解一下“MySQL 查询速度慢与性能差的原因与解决方法”的完整攻略。 原因分析 MySQL 查询速度慢与性能差的原因可能包括以下几个方面: 硬件设备 硬件设备的性能对 MySQL 的查询速度有很大的影响。如果你的服务器性能较低,那么 MySQL 的查询速度也会变得很慢。可以通过升级硬件设备、加大缓存等方式来提升 MySQL 的查询速度。 锁 …

    database 2023年5月19日
    00
  • MySQL5.6基本优化配置

    MySQL5.6基本优化配置是数据库性能优化的重要一环,本文将从如下三个方面来进行详细讲解: 硬件选型与参数配置 MySQL参数优化 SQL语句优化 1. 硬件选型与参数配置 1.1 硬件选型 对于MySQL数据库,硬件选型非常重要。基于不同的应用场景,硬件选型的重点也不同,通常需要考虑CPU、内存、磁盘IO性能等因素。 MySQL在CPU的利用上较为看重单…

    database 2023年5月22日
    00
  • windows上安装mysql5.7

    安装前准备: 系统:windows7-x64 MySql:mysql5.7.19-X64-windows压缩包 安装步骤: 在windows上安装mysql有两种方式,一种是安装mysql压缩包,一种是图形化的安装,只要是配置好my.ini配置文件,压缩包安装比图形化更快更简单。这篇文章主要说明mysql压缩包的安装步骤。 一、新建数据库文件存放目录 将my…

    MySQL 2023年4月12日
    00
  • update 子查询使用介绍

    当我们需要根据其他表格的数据进行更新时,就需要用到update子查询了。 通常update子查询是这样的结构: UPDATE table1 SET column1 = ( SELECT column2 FROM table2 WHERE condition ) WHERE condition; 其中,“table1”是要被更新的表格,“table2”是提供数…

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