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

news2024/10/6 16:19:36

概述

链接:upgrade

相关文章列表

  • nestjs系列笔记

示例工程说明

  • 这个工程是我使用nestjs多个项目后,总结出来的模板。
  • 这是一个完整的工程,使用了yaml做为配置,使用了log4js和redis和typeorm,sawgger,自定义了session store等,支持多环境配置等。
  • 这里使用tmg使用成typeorm实体类(npm i @zdhsoft/tmg -g)
  • 还有我喜欢使用我自己的开源库xmcommon( npm i xmcommon),这里有很多常用的方法,我在工程中经常用到。
  • 下面是说明
  • 为什么只给一个链接,因为my_testlist是我编写文章和学习,实验性代码的仓库,同时可以通过它获得jet brains每年许可的项目, 很多积累代码,在我需要的时候,可以随时看。

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

项目:upgrade

  • 作者:zdhsoft
  • 日期:2023-04-27
  • 基于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/539751.html

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

相关文章

ChatGPT热门资料汇总,绝对不割韭菜

前言 ChatGPT 的出现&#xff0c;AI圈子一下就热闹起来了&#xff0c;各个公司争先恐后地出自己的产品&#xff0c;百度的文心一言、谷歌的Bard、阿里的通义千问等等&#xff0c;有很多人借此机会已经赚到百万&#xff0c;很多卖课搞培训的都是互为合伙人&#xff0c;大家都懂…

243亿美元营收背后,百年龙头的汽车生态砝码

伴随着更为显著的全球汽车新能源化、智能化趋势&#xff0c;汽车产业必将迎来更多新机遇。 一方面&#xff0c;主机厂为保持竞争优势、适应客户多元化需求&#xff0c;不断加快汽车更迭速度&#xff0c;为汽车产业带来了新的市场机遇。另一方面&#xff0c;随着人工智能、云计…

2023企业数智化财务创新峰会 · 成都站圆满举办!

5月17日&#xff0c;「智能会计 价值财务」2023企业数智化财务创新峰会巡回来至天府&#xff0c;川大商学院权威教授领衔分享、大型企业财务先锋详解财务数智化领先实践、毕马威资深专家现场解读财务创新趋势与典型案例&#xff0c;与线上线下数千人一同见证“智能会计”新时代…

网络请求--http请求学习详解

写在前面&#xff1a; 文章目录 http简介http报文格式请求样例响应样例 起始头格式 常见请求方法GETPOSTRESTful风格 头部字段Content-Type Https http简介 http&#xff1a;超文本传输协议 是一种无状态&#xff0c;无连接&#xff0c;以应答式的协议&#xff0c;可使用扩展…

力扣sql中等篇练习(二十三)

力扣sql中等篇练习(二十三) 1 统计实验的数量 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 有可能数据本身就不全,就需要自行创建临时表 WITH T as (SELECT Android p1,Reading e1UNIONSELECT Android p1,Sports e1UNIONSELECT Android p1,Prog…

最简单配置jenkins容器使用宿主机的docker方法

构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可 设置Jenkins容器使用宿主机Docker 设置宿主机docker.sock权限 chown root:root /var/run/docker.sock chmod orw /var/run/docker.sock 添加数据卷 v…

215.数组中第 k 个最大的元素。

解题思路&#xff1a; 利用快排的思想&#xff0c;不断地将数组分成若干部分&#xff0c;缩小查找范围&#xff0c;最终找到第 k 大的元素。 1、首先&#xff0c;对数组进行快速排序&#xff0c;使得数组从大到小排序&#xff0c;然后返回排序后的第 k 个元素即可。 2、在快排…

关于window.print打印分页功能

平常window.print分页一般打印时用到page-break-after:always; 打印的样式设置在 <style type"text/css" media"print"></style>进行设置 但现在我想动态打印分页&#xff0c;即内容一页时打印一页&#xff0c;内容两页时打印两页。。。 现…

HBase 写入数据(Scala代码)

代码如下》》 package Flink_HBase_APLimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject this_one {def main(args: Array[String]): Unit…

开源即时通讯IM框架MobileIMSDK的Uniapp端开发快速入门

► 相关链接&#xff1a; ① MobileIMSDK-Uniapp端的详细介绍② MobileIMSDK-Uniapp端的开发手册new&#xff08;* 精编PDF版&#xff09; 一、理论知识准备 您需要对Uniapp和Vue开发有所了解&#xff1a; 1&#xff09;Uniapp 官方入门教程2&#xff09;可能是最好的 unia…

MyBatis Plus 拦截器实现数据权限控制

一、介绍 上篇文章介绍的MyBatis Plus 插件实际上就是用拦截器实现的&#xff0c;MyBatis Plus拦截器对MyBatis的拦截器进行了包装处理&#xff0c;操作起来更加方便 二、自定义拦截器 2.1、InnerInterceptor MyBatis Plus提供的InnerInterceptor接口提供了如下方法&#x…

SpringCloud 集成 Eureka Server

SpringCloud 集成 Eureka Server 1 pom.xml2 application.yml3 appliction.java4 启动 Eureka的优点&#xff1a; 简单易用&#xff1a;Eureka设计简单&#xff0c;容易上手和部署。 高可用性&#xff1a;Eureka支持高可用性配置&#xff0c;通过使用多个Eureka服务器实例来提…

IEEE Robotics and Automation Letters(RA-L)与ICRA投稿

一 总体感受 RAL不愧未短平快的论文&#xff0c;从接收论文、送审和复审都相当快&#xff0c;我的两个多月出最终接收结果&#xff0c;期刊官网规定6个月内出最终结果。作为现在IEEE主推的短文&#xff0c;限制在8页以内&#xff0c;在6页以上时超页费为175刀/页&#xff0c;目…

平台使用篇 | 批处理(bat)脚本使用教程(二)

导读 BAT脚本提供了一种快速且有效的自动化方式&#xff0c;使用户能够更轻松地处理大量的任务&#xff0c;并且可以根据需要自由地调整和修改脚本。本讲简要介绍了批处理技术及其常用命令。本篇教程主要对批处理技术的语言特点和编程思路进行重点讲解。 RflySim平台更多学习资…

Flutter-Drawer使用

drawer Drawer是Android开发中Material风格常用的设计&#xff0c;就是我们常说的“抽屉”效果&#xff0c;一个从侧边栏拉出来的导航面板。 在Flutter使用Material风格&#xff0c;最为常用的组件之一就是Scaffold了&#xff1b;Scaffold的drawer属性是一个Widget类型的组件&…

Red Hat重置root密码

目录 前言 1、使用rd.break参数重置root密码 2、使用安装盘重置root密码 前言 我们有时会忘记linux系统的root密码&#xff0c;有的不会重置密码只能重置系统了&#xff0c;下面介绍两种重置root密码的方法 1、使用rd.break参数重置root密码 1、启动系统&#xff0c;并在…

将有序数组转换为二叉树

md这个破CSDN模板怎么没了&#xff0c;编辑器也死难用&#xff0c;气死 1、题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不…

如何免费使用ChatGPT,提高开发效率?以开发者的角度ChatGPT能做什么?

一、如何免费使用ChatGPT 1&#xff09;登录openai官网https://openai.com/&#xff0c;注册账号后获取免费体验&#xff1b;但目前已经很难成功注册openai账号了&#xff0c;需要魔法上网的同时代理不能使用香港、俄罗斯等地区&#xff0c;需要国外邮箱和国外手机号&#xff…

企业用友NC软件被locked勒索病毒攻击,如何恢复nchome配置文件

近日&#xff0c;用友NC系统遭受了一次严重的勒索病毒攻击&#xff0c;导致许多企业的数据和配置文件被锁定。其中&#xff0c;NC Home配置文件也受到了影响&#xff0c;给企业带来了不小的损失。那么&#xff0c;在这种情况下&#xff0c;如何恢复NC Home配置文件呢&#xff1…

一个动作,直接盘活死仓库!实现效益增长200%!(附完整模板)

有人说&#xff1a;看一家工厂管理到不到位&#xff0c;看下他的仓库就知道了。 仓库作为企业存储和保管物料的重要场所&#xff0c;其管理的好坏直接影响着企业的生产与销售环节&#xff01; 我拜访过很多制造型企业&#xff0c;他们的仓库或多或少都存在以下问题—— 物料…