使用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日

相关文章

  • SQL数据查询之DQL语言介绍

    我会为您详细讲解“SQL数据查询之DQL语言介绍”的完整攻略。 DQL语言介绍 什么是DQL语言 DQL(Data Query Language)是数据库查询语言,主要用于从数据库中查询、检索和过滤数据。DQL语言包含了很多常用的关键字例如SELECT、FROM、WHERE、GROUP BY、HAVING等,可以通过这些关键字组合出各种复杂的数据查询语句。 …

    database 2023年5月21日
    00
  • 详解Redis RDB的持久化方法

    Redis RDB持久化介绍 Redis 是一个开源的高性能键值对存储数据库,提供多种不同的持久化方式,其中 RDB 持久化是其中一种。RDB 持久化可以将 Redis 的数据和状态以快照的方式保存到磁盘上。 在 Redis 中进行 RDB 持久化的过程就是将 Redis 内存中的数据转化为二进制格式并写入到一个文件中。我们可以通过读取这个文件来还原 Red…

    Redis 2023年3月21日
    00
  • MySQL和连接相关的timeout 的详细整理

    MySQL 是一个流行的关系型数据库管理系统,常用于开发 Web 应用程序。而连接相关的timeout 是指当 MySQL 连接到某个主机上时,如果在一定时间内(如30秒)没有传输任何数据,MySQL 就会认为连接已经超时了。由于超时设置有时会影响到应用程序的响应时间,因此需要对其进行仔细调整。 MySQL 设置连接超时的关键可以通过修改 my.cnf 的配…

    database 2023年5月22日
    00
  • 详解MySql存储过程参数的入门使用

    详解MySql存储过程参数的入门使用 MySQL存储过程是预定义SQL语句的集合,这些语句被组合在一起,并作为单个实体按照特定的方式调用。存储过程有助于简化应用程序,提高性能和安全性。在存储过程中,可以灵活地使用参数,来实现更加复杂的数据操作。本文将介绍MySQL存储过程参数的入门使用方法。 存储过程参数的定义 在MySQL存储过程中,参数是可选项。参数可以…

    database 2023年5月22日
    00
  • SQL 行值轮转

    下面将详细讲解SQL行值轮转的攻略。 什么是SQL行值轮转? SQL行值轮转(Row Value Transposition),也称为行转列、透视表,是将原始数据行转换为新的数据列的一个过程。通常情况下,我们从数据库中获取的数据是以行的形式呈现的,如果要将这些行数据“横向”展示,可以使用SQL行值轮转。 SQL行值轮转的语法 SQL行值轮转有不同的语法,此处…

    database 2023年3月27日
    00
  • centos6.9 安装mysql8

    centos6.9 安装 mysql8   # 安装mysql8 1.下载https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.16-2.el6.x86_64.rpm-bundle.tar 2.解压 tar -xvf mysql-8.0.16-2.el6.x86_64.rpm-bundle.tar rpm …

    MySQL 2023年4月12日
    00
  • php牛逼的面试题分享

    下面就给大家详细介绍 “php牛逼的面试题分享”的完整攻略。 一、前言 在找工作的过程中,面试可能是最关键的一环。对于php开发者来说,要想通过面试,就需要对常见的php面试题进行深入了解和学习。本文就针对php的常见面试题,提供了一些有用的攻略和建议。 二、面试题分类 在准备php面试过程中,需要针对以下几个方面进行深入了解: 1.基础知识 php的基础知…

    database 2023年5月21日
    00
  • linux 服务器自动备份脚本的方法(mysql、附件备份)

    下面我将详细讲解 “linux 服务器自动备份脚本的方法(mysql、附件备份)”。 背景介绍 在日常的服务器维护中,备份是至关重要的一项工作。本文主要介绍如何使用linux自动备份脚本备份服务器上的mysql数据库和附件文件。 准备工作 在开始前需要先进行几个准备工作: 确定备份的目录和数量 安装必要的软件:rsync, mysqldump 编写备份脚本 …

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