nest笔记十一:一个完整的nestjs示例工程(nestjs_template)

news2024/11/28 18:49:59

概述

链接:nestjs_template

相关文章列表

  • nestjs系列笔记

示例工程说明

  • 这个工程是我使用nestjs多个项目后,总结出来的模板。
  • 这是一个完整的工程,使用了yaml做为配置,使用了log4js和redis和typeorm,sawgger,自定义了session store等,支持多环境配置等。
  • 这里使用tmg使用成typeorm实体类(npm i @zdhsoft/tmg -g)
  • 还有我喜欢使用我自己的开源库xmcommon( npm i xmcommon),这里有很多常用的方法,我在工程中经常用到。
  • 下面是说明

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

项目:nestjs_template

  • 作者:zdhsoft
  • 日期:2023-05-19
  • 基于nestjs的后端系统
  • License:

1. Description

1.1 环境说明

  • 这个工程默认使用vscode, 并已经集成了vscode运行所需要必要配置
  • 这里使用eslint对代码进行检查 具体配置查看 .eslintrc.js 使用npm run lint对代码做整检查
  • 这里使用prettier对代码进行格式化,具体配置看 .prettierrc 使用npm run format可以对整个项目代码格式化
  • 这里需要这装插件:ESLint, 和 Prettier - Code formatter
  • .gitigonore 这里配置了一些,可以忽略的文件,使他们不会进入git管理

1.2 配置

  • 这里工程已经支持多环境配置,每个环境使用指定的配置。配置文件全在config目录下面
  • 这里使用的配置是yaml格式的文件,文件名格式:env.环境名称.yaml,其中,env.default.yaml是一个全局的默认配置,实际环境的配置会替换env.default.yaml存在的配置
  • 配置处理的代码,放在src/init/init.ts文件,在main.ts最开的包含中,要第一个引入这个模块
// main.ts
import './init/init';   //在main.ts最上面,要引入这个模块
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { getLogger } from 'xmcommon';
import { NestLogger } from './common/nest.logger';
import { RequestInterceptor } from './common/request.interceptor';
import { HttpFilterFilter } from './common/http_filter.filter';
import { NestExpressApplication } from '@nestjs/platform-express';
import * as session from 'express-session';
import * as path from 'path';
import { AuthGuard } from './common/auth.guard';
import { EnvUtils } from './env_utils';
import { ConfigUtils } from './init/config_utils';
import { ValidationPipe } from './common/validation_pipe';
  • src/init/init.ts 首先会初会化全局的日志文件,然后初始化环境变量,最后加载对应的环境的配置文件
  • 程序启动会,会在config/final生成最终的配置文件,分别是finalConfig.环境名称.json和finalConfig.环境名称.yaml

1.3 已经集成的模块功能

1.3.1 session

  • 这里已经集成了session,支持基于内存,文件,redis和mysql四种存放session的方式。(在实际测试使用中,发现使用文件存储的,老是会存在一些问题)
  • 详见src/init/config_utils.ts中的buildSessionOptions

1.3.2 log4js

  • 这里已经集成了log4js生成日志,有三个输出分别是console,日志文件和错误日志文件

1.3.3 这里集成了全局的守护的功能:auth.guards.ts

  • 这个会对api做登录检查,有需要登录的,如果没有登录,返回没有登录的错误

1.3.4 全局的验证管道: validation_pipe.ts

  • 这个主要是针对class-validator和class-transformer的依赖参数注入,这方面的资料比较多,可以看官方文档

1.3.5 全局的异常处理 http_filter.filter.ts

  • 这个主要是将抛出的异常获取,并转换为通用的返回方式

1.3.6 全局的返回处理 这块代码在全局的拦截器里面 request.interceptor.ts

  • nestjs没有默认的固定返回结构,可以返回任何内容。这里专门针对api的调用,做统一返回处理

1.3.7 全局的拦截器 request.interceptor.ts

  • 这里主要的是处理POST 201的返回,将它变成为200,
  • 增加请求处理前后的日志打印和耗时打印,用于调试

1.3.7 集成swagger

  • 在开发模式下,集成了 http://xxxx/apidoc方式访问

1.4 运行环境说明(envid)

1.4.1 运行环境与配置

  • 一般情况下,运行环境主要有两个,一个是测试运行环境,一个是生产运行环境,不同的环境要加载不同的配置
  • 在这里启动的时候,需要指明envid,告诉系统这次运行的是什么环境。
    • 通过个envid可以加载config/env.xxx.ymal的配置文件
    • 如envid=‘test’,则会加载config/env.test.yaml
    • 默认的envid是’local’,除此之外,还有一个缺省环境,对一些所有环境公有的配置,可以放到env.default.yaml中, 这样可以减少配置量。在实际的环境如果有同名的,则实际的配置会替换在default中的配置。
    • 如果程序启动,需要指定环境id,则只要传入参数就可以,如下启动’test’环境。
    node dist/main.js --envid test 
    

1.4.2 增加自定义环境说明

  • 默认的工程,提供了四个默认环境与配置,分别是,default, test, local, production,这些环境都定义在EnumRuntimeEnv这个枚举中
  • 枚举等运行环境相关配置放在文件,src/env_utils.ts中
/** 可以环境常量定义 */
export enum EnumRuntimeEnv {
    /** 缺省配置环境 */
    default = 'default',
    /** 测试 */
    test = 'test',
    /** 本地调试环境 */
    local = 'local',
    /** 生产环境 */
    production = 'production',
}
  • 如果要新增加运行环境,第一步先在EnumRuntimeEnv增加新的枚举值,第二步,在config/增加一个新的配置文件。下示是示例增加一个simple环境
// 第一步: 在EnumRuntimeEnv增加simple枚举值的定义,要求名称与值相同
export enum EnumRuntimeEnv {
  /** 缺省配置环境 */
  default = 'default',
  /** 测试 */
  test = 'test',
  /** 本地调试环境 */
  local = 'local',
  /** 生产环境 */
  production = 'production',
  /** 新增加的环境 */
  simple = 'simple',
}

// 第二步:在config目录下,复制env.default.yaml,并改名为env.simple.yaml,
// 第三步:再用编辑器编译env.simple.yaml文件,配置simple实际需要的配置
// 第四步:启动的时候,带上启动参数: node dist/main.js --envid simple
// 这样就实现了新增环境要求
  • 如果有些环境,是要视步生产环境的,则只需要将EenumRuntimeEnv.simple加到生产环境id列表中去就可以了,在src/env_utils.ts中有一个生产环境id数组:production_env_list。如下增加
/** 被视为生产环境的环境id数组 */
const production_env_list = [EnumRuntimeEnv.production, EnumRuntimeEnv.simple];
// 系统启动后,就可以看到取得当前系统环境定义
/** 全局环境配置 */
const env: IEnv = {
  env: EnumRuntimeEnv.local,
  /** 是否是开发环境 */
  isDev: true,
};
// 使用的时候,在代码调用
if(XEnvUtils.isDev) {
  console.log('这是一个开发环境');
} else {
  console.log('这是一个生产环境');
}

2 安装依赖环境

$ npm install

3 运行app

3.1 在vscode下面

  • 这个模板工程已经配置好了相应的vscode配置,可以在vscode下面,按F5开始调试运行
  • 下面是配置的内容.
{
    // 使用 IntelliSense 了解相关属性。
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "pwa-node",
            "request": "launch",
            "name": "编译并运行 - 本地测试",
            "console": "integratedTerminal",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "program": "${workspaceFolder}\\dist\\main.js",
            "preLaunchTask": "npmBuild",
            "args": ["--env", "test"],
            "outFiles": [
                "${workspaceFolder}/dist/**/*.js"
            ]
        },
        {
            "type": "pwa-node",
            "request": "launch",
            "name": "直接运行,不编译 - 本地测试",
            "console": "integratedTerminal",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "program": "${workspaceFolder}\\dist\\main.js",
            "args": ["--env", "test"],
            "outFiles": [
                "${workspaceFolder}/dist/**/*.js"
            ]
        }
    ]
}

3.1.1 编译并运行 - 本地测试

这个是针对已有变动代码了,则需要在这里运行,这里会对代码做检查,并且编译,最后才是运行

3.1.2 直接运行,不编译 - 本地测试

这个是没有变动代码,可以直接开始调试运行

3.2 命令行

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

4 Test

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

5 Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you’d like to join them, please read more here.

6 Stay in touch

  • Author - Kamil Myśliwiec
  • Website - https://nestjs.com
  • Twitter - @nestframework

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Less和sass安装及使用

CSS预处理器 由来 CSS本身不是一种编程语言。你可以用它开发网页样式&#xff0c;但是没法用它编程。换句话说&#xff0c;CSS基本上是设计师的工具&#xff0c;不是程序员的工具。它并不像其它程序语言&#xff0c;比如说JavaScript等&#xff0c;有自己的变量、常量、条件语…

手把手教你验证upd与tcp“端口”开发策略

系列文章目录 文章目录 系列文章目录前言一、问题&#xff1f;二、验证网络策略步骤三、增强验证网络策略总结 前言 这篇文章&#xff0c;本意是让大家了解除了常用的telnet之外&#xff0c;在运维过程中&#xff0c;如果在服务器中未发现相关命令还可以借用像ssh、wget 等命令…

震惊!我的电脑居然中病毒了,快来看看我是如何解决的

打开电脑就自动跳转到http://www.exinariuminix.info/ 问题背景 今天刚打开电脑&#xff0c;然后电脑莫名奇妙就自动跳转到http://www.exinariuminix.info/网页&#xff1a; 联网后加载&#xff0c;它就自动重定向到一个莫名其妙的网站&#xff1a; 问题原因 出于好奇&#…

大数据Doris(二十四):Doris数据Insert Into导入方式介绍

文章目录 Doris数据Insert Into导入方式介绍 一、语法及参数 二、案例 三、注意事项 1、关于插入数据量 2、关于insert操作返回结果 3、关于导入任务超时 4、关于Session变量 5、关于数据导入错误 Doris数据Insert Into导入方式介绍 Doris 提供多种数据导入方案&…

SpringMVC执行原理

目录结构 pom.xml依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- https://mvnrepository.co…

【Java校招面试】实战面经(五)

目录 前言一、讲讲short数据类型&#xff0c;short s1 1; s1 s11;对不对&#xff1f;二、使用final关键字的好处三、如果String中重写equals不重写hashCode会出现什么问题&#xff1f;四、ConcurrentHashMap的get方法是不加锁的&#xff0c;如何保证线程安全&#xff1f;五、…

缓存存在的问题

文章目录 缓存问题缓存穿透引入解决方案 缓存雪崩缓存击穿 缓存问题 使用缓存时常见的问题主要分为三个&#xff1a;缓存穿透 、缓存雪崩、缓存击穿。 下面对其进行一一学习 缓存穿透 引入 定义&#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#…

20230521给coolpi4b开发板刷Android12和串口的使用

20230521给coolpi4b开发板刷Android12和串口的使用 2023/5/21 9:31 所需要的配件&#xff1a; 1、2.0mm转2.54mm的杜邦线母头2条&#xff08;2位一起的一条&#xff09; 2、串口板&#xff1a;CH340&#xff08;WIN7下使用&#xff09; 3、USB的公头-公头线 首先&#xff0c;欢…

微星MSI GE66 10SF-416RU电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板Intel HM470 处理器Intel Core i7-10875H 2.30GHz up to 5.10GHz已驱动 内存Kingston Fury Impact DDR4 2x16Gb 3200mhz已驱动 硬盘NT…

Redis介绍及Linux单机安装

1.Redis介绍 1.1.什么是Redis Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 Redis是完全开源的&#…

OpenCV人脸识别QT上位机(含源码)

OpenCV Releases&#xff1a;4.6.0 开发平台&#xff1a;QT 6.4.0 编译环境&#xff1a;MSVC 2019 64bit 主要功能&#xff1a;1、预处理图片 2、生成CSV文件 3、生成识别器文件等功能。主要用于学习opencv的整个流程和实现一些简单的功能&#xff0c;比如识别指定的人脸并显…

安卓与串口通信-实践篇

前言 在上一篇文章中我们讲解了关于串口的基础知识&#xff0c;没有看过的同学推荐先看一下&#xff0c;否则你可能会不太理解这篇文章所述的某些内容。 这篇文章我们将讲解安卓端的串口通信实践&#xff0c;即如何使用串口通信实现安卓设备与其他设备例如PLC主板之间数据交互…

【计算机网络复习】第五章 数据链路层 1

数据链路层的作用 两台主机&#xff08;端到端&#xff09;之间的通信是依靠相邻的主机/路由器之间的逐步数据传送来实现 数据链路层实现相邻主机/路由器间的可靠的数据传输 网络层&#xff1a;主机-主机通信 数据链路层&#xff1a;点到点通信 数据链路层的主要功能 u 链路…

3R幸福法

3R幸福法 3R幸福法可以帮助我们《建立和谐亲密关系》 模型介绍 3R幸福法体现的是一个人被关注的完整逻辑&#xff1a; Reson-理由&#xff0c;关注缘起。不会让你想表达的感情看起来显得唐突&#xff0c;不会让对方和自己不好意思。Respond-反应&#xff0c;是关注影响。更多…

ROS 工作空间与功能包的创建(三)

执行命令&#xff1a; mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src/catkin_init_workspace echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 效果&#xff1a; 输入命令查看添加成功了没有 tail ~/.bashrc 编译工程&#xff1a;执行命令 cd ~…

csdn文章markdown格式下载

前言 网上下载CSDN文章的方式多种多样&#xff0c;有的直接下载为pdf格式&#xff0c;有的利用python/java代码将文章下载为md格式&#xff0c;也有的用JavaScript下载文章&#xff0c;但下载的文章仅限于自己写的&#xff08;会介绍&#xff09;&#xff0c;这里也提供一种简单…

关于接口中的一些常用实例以及比较方法的区别

文章目录 &#x1f490;文章导读&#x1f334;Object 类toString() 获取对象信息equals 对象比较方法hashCode 获得对象的具体位置 &#x1f334;接口使用实例Comparable 接口Comparator 接口 &#x1f490;文章导读 在本篇文章中&#xff0c;详解了什么是Object类&#xff0c;…

MyBatis中三级缓存的理解

文章目录 前言1. 环境搭建1.1 依赖引入1.2 mybatis-config.xml配置配置db.properties在mybatis-config.xml引入db.properties 1.3 实体类1.4 mappermapper接口mapper映射文件 1.5 测试 2.缓存2.1 一级缓存mybatis-config.xml 配置日志开启日志配置日志文件logback.xml测试相同m…

深度学习之搭建LSTM模型预测股价

大家好&#xff0c;我是带我去滑雪&#xff01; 本期利用Google股价数据集&#xff0c;该数据集中GOOG_Stock_Price_Train.csv为训练集&#xff0c;GOOG_Stock_Price_Test.csv为测试集&#xff0c;里面有开盘价、最高股价、最低股价、收盘价、调整后的收盘价、成交量&#xff0…

Flutter项目webview加载没有HTTPS证书的网页在Android和iOS设备上无法显示的解决方案

一、问题描述 Flutter项目使用谷歌官方webview库 webview_flutter&#xff0c;加载自签名证书、证书失效、无证书等HTTPS网页地址时&#xff0c;在Android或pc浏览器中提示证书失效&#xff0c;在iOS设备上为空白页&#xff0c;为了加载自签名证书的网页&#xff0c;需要饶过i…