前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习NestJS的第一个接口(一)

学习NestJS的第一个接口(一)

原创
作者头像
一起重学前端
修改2024-09-11 10:40:46
1630
修改2024-09-11 10:40:46

NestJS:Node.js最受欢迎的框架之一

以前开发小程序api使用过Express.js、Koa.js等框架,最近想用NestJS重构自己的几个小程序后台,所以从零开始学习NestJS框架。

目前Node.js 最受欢迎的框架通常指的是那些为了简化 Node.js 应用程序开发而创建的库或工具。以下是一些最受欢迎的框架:

  1. Express.js - 这是一个简化 Node.js 应用程序开发的非常流行的框架。它提供了一个轻量级的web应用程序服务器,可以快速地搭建一个web服务器。
  2. Koa.js - 是下一代的 Express.js 框架,使用了更现代的中间件API。
  3. Hapi.js - 另一个强大的 Node.js 框架,提供了丰富的功能和强大的插件系统。
  4. Nest.js - 是一个用于构建高效、可扩展的Node.js服务器端应用的框架。它使用了OOP(面向对象编程)的概念,并结合了函数式编程的模式。

下面我们主要介绍下NestJS

NestJS 具有架构设计合理、功能特性丰富、开发效率高、性能和可扩展性好等优势,是构建 Node.js 服务器端应用程序的理想选择

一、架构设计

1.模块化架构

  • NestJS 采用模块化的架构设计,使得代码结构清晰、易于维护。每个模块可以专注于特定的业务功能,模块之间的依赖关系明确,方便开发人员进行代码组织和管理。
  • 例如,一个电商应用可以分为用户模块、商品模块、订单模块等,每个模块都有自己的控制器、服务和实体,模块之间通过依赖注入进行交互。

2.面向对象编程(OOP)风格

  • 借鉴了面向对象编程的思想,提供了类、接口、装饰器等特性,使得代码更加直观、易于理解和扩展。
  • 例如,可以使用类来定义控制器、服务和实体,通过装饰器来添加元数据,提高代码的可读性和可维护性。 3.依赖注入
  • 强大的依赖注入系统,使得模块之间的耦合度降低,提高了代码的可测试性和可维护性。开发人员可以轻松地替换模块的实现,而不影响其他部分的代码。
  • 例如,可以通过依赖注入将数据库连接对象注入到服务中,使得服务可以方便地访问数据库,而不需要在服务内部硬编码数据库连接的细节。

二、功能特性

1.支持多种后端技术

  • NestJS 可以与多种后端技术集成,如 TypeScript、Express.js、Fastify 等。这使得开发人员可以根据项目的需求选择合适的技术栈,提高开发效率。
  • 例如,如果需要高性能的服务器,可以选择使用 Fastify;如果需要更好的类型安全和开发体验,可以选择使用 TypeScript。

2.内置的功能模块

  • 提供了许多内置的功能模块,如路由、中间件、验证、异常处理等,减少了开发人员的工作量。这些模块经过精心设计和优化,具有良好的性能和稳定性。
  • 例如,可以使用 NestJS 的路由模块来定义 API 路由,使用验证模块来对输入数据进行验证,使用异常处理模块来统一处理应用程序中的异常。

3.支持微服务架构

  • NestJS 支持构建微服务架构,可以轻松地将应用程序拆分为多个独立的服务,每个服务可以独立部署和扩展。这使得应用程序具有更好的可扩展性和高可用性。
  • 例如,可以使用 NestJS 的微服务模块来构建一个分布式的电商系统,将用户服务、商品服务、订单服务等拆分为独立的微服务,通过消息队列进行通信。

三、开发效率

1.代码生成器

  • NestJS 提供了代码生成器,可以快速生成模块、控制器、服务等代码结构,减少了手动编写代码的工作量。开发人员可以通过命令行工具或集成开发环境(IDE)插件来使用代码生成器。
  • 例如,可以使用 nest generate module user 命令来生成一个用户模块,包括控制器、服务和实体等文件。

2.良好的文档和社区支持

  • NestJS 拥有详细的文档和活跃的社区,开发人员可以方便地获取帮助和解决问题。文档内容丰富,包括教程、示例代码、API 参考等,方便开发人员快速上手。
  • 社区活跃,有许多开发者分享经验和解决方案,遇到问题时可以在社区中寻求帮助。

3.与前端框架集成方便

  • NestJS 可以与各种前端框架(如 Angular、React、Vue.js 等)集成,实现前后端分离的开发模式。通过使用 API 网关或代理服务器,可以方便地将前端请求转发到后端服务。
  • 例如,可以使用 NestJS 构建一个 API 网关,将前端的请求转发到不同的微服务,实现统一的入口和路由管理。

四、性能和可扩展性

1.高性能

  • NestJS 基于 Node.js 运行时,具有良好的性能表现。它可以处理大量的并发请求,并且响应速度快。此外,NestJS 还可以通过使用缓存、异步编程等技术来进一步提高性能。
  • 例如,可以使用缓存中间件来缓存频繁访问的数据,减少数据库查询的次数,提高响应速度。

2.可扩展性

  • 由于采用了模块化架构和依赖注入,NestJS 具有良好的可扩展性。可以轻松地添加新的功能模块、扩展现有模块的功能,或者替换模块的实现。
  • 例如,如果需要添加一个新的支付功能,可以创建一个支付模块,并将其集成到现有的电商系统中。
NestJS的第一个接口 Hello World!
代码语言:bash
复制
npm i -g @nestjs/cli // 全局安装Nest 

nest new project-name // 创建项目

我们选择yarn 初始化项目

yarn 初始化项目
yarn 初始化项目

本地环境yarn 1.22.22、node 21.7.2

yarn start
yarn start
代码语言:typescript
复制
 import { Controller, Get } from '@nestjs/common';



   @Controller()

   export class AppController {

     @Get()

     getHello(): string {

       return 'Hello World!';

     }

   }

yarn start

app.module.ts

代码语言:typescript
复制
import { Module } from '@nestjs/common';

import { AppController } from './app.controller';

import { AppService } from './app.service';

@Module({

  imports: [],

  controllers: [AppController],

  providers: [AppService],

})

export class AppModule {}

app.service.ts

代码语言:typescript
复制
import { Injectable } from '@nestjs/common';



@Injectable()

export class AppService {

  getHello(): string {

    return 'Hello World!';

  }

}

app.controller.ts

代码语言:typescript
复制
import { Controller, Get } from '@nestjs/common';

import { AppService } from './app.service';



@Controller()

export class AppController {

  constructor(private readonly appService: AppService) {}



  @Get()

  getHello(): string {

    return this.appService.getHello();

  }

}

main.ts

代码语言:typescript
复制
declare const module: any;

import { NestFactory } from '@nestjs/core';

import { AppModule } from './app.module';



async function bootstrap() {

  const app = await NestFactory.create(AppModule);

  await app.listen(3001);

  if (module.hot) {

    module.hot.accept();

    module.hot.dispose(() => app.close());

  }

}

bootstrap();
Hello World!
Hello World!
NestJS热更新
使用 NestJS 内置的开发服务器(需要安装 @nestjs/cli******)**
1.使用 ts-node-dev
  1. 安装 ts-node-dev
代码语言:bash
复制
npm install -D ts-node-dev
  1. 修改启动脚本:
代码语言:bash
复制
在 `package.json` 文件中,将启动脚本修改为使用 `ts-node-dev`。
代码语言:json
复制
"scripts": { "start": "ts-node-dev --respawn --transpile-only src/main.ts" }
2. run-script-webpack-plugin
代码语言:bash
复制
 yarn add webpack-node-externals run-script-webpack-plugin webpack
代码语言:json
复制
"start:dev": "webpack --config webpack.config.js --watch",

webpack.config.js

代码语言:javascript
复制
const webpack = require('webpack');

const path = require('path');

const nodeExternals = require('webpack-node-externals');

const { RunScriptWebpackPlugin } = require('run-script-webpack-plugin');



module.exports = {

  entry: ['webpack/hot/poll?100', './src/main.ts'],

  target: 'node',

  externals: [

    nodeExternals({

      allowlist: ['webpack/hot/poll?100'],

    }),

  ],

  module: {

    rules: [

      {

        test: /.tsx?$/,

        use: 'ts-loader',

        exclude: /node\_modules/,

      },

    ],

  },

  mode: 'development',

  resolve: {

    extensions: ['.tsx', '.ts', '.js'],

  },

  plugins: [

    new webpack.HotModuleReplacementPlugin(),

    new RunScriptWebpackPlugin({ name: 'server.js' }),

  ],

  output: {

    path: path.join(\_\_dirname, 'dist'),

    filename: 'server.js',

  },

};webpack.config.js
3.启动开发服务器 --watch

在项目根目录下运行以下命令启动开发服务器:

代码语言:bash
复制
nest start --watch

这个命令会启动一个开发服务器,并监视文件的变化。当文件发生变化时,服务器会自动重新加载。

这些方法可以帮助你在开发过程中实现热更新,提高开发效率。根据你的项目需求和偏好选择适合的方法。

开始写这篇文章的时候,我已经把自己的小程序后台koa项目改造成了NestJS。后续还会写NestJS使用ORM、如何在NestJS中添加日志、jwt token处理、全局错误处理、接口参数校验、redis缓存、图片上传等等

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NestJS:Node.js最受欢迎的框架之一
    • NestJS 具有架构设计合理、功能特性丰富、开发效率高、性能和可扩展性好等优势,是构建 Node.js 服务器端应用程序的理想选择
      • NestJS的第一个接口 Hello World!
        • NestJS热更新
          • 使用 NestJS 内置的开发服务器(需要安装 @nestjs/cli******)**
          • 1.使用 ts-node-dev
          • 2. run-script-webpack-plugin
          • 3.启动开发服务器 --watch
      相关产品与服务
      消息队列 TDMQ
      消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档