Nest.js权限管理系统开发(二)连接MySQL、Redis

安装MySQL及相关依赖

下载dmg文件安装

前往MySQL :: Download MySQL Community Server下载最新版本的MySQL。

打开系统设置,拉到最下方可以看到MySQL,打开看到两个绿点表示安装成功,也可以在这里修改MySQL密码。

配置环境变量

打开终端配置MySQL环境:

vim ~/.bash_profile

按字母 i 键切换至输入状态,添加如下配置:

export PATH=${PATH}:/usr/local/mysql/bin

按ESC键退出输入状态,输入:wq回车即可,然后执行 source ~/.bash_profile 使其配置生效。为确保配置成功,vim ~/.zshrc 按以上步骤操作一遍。

输入mysql --version,出现MySQL版本信息,则表示配置成功。

进入MySQL

终端输入 mysql -u root -p 回车输入数据库密码,出现如下信息说明进入MySQL成功。

安装MySQL可视化工具(可选)

MySQL Workbench 官方地址:https://dev.mysql.com/downloads/workbench/。或者使用一个 VSCode 数据库可视化插件Database Client,安装完后连接我们的数据库就能进行一个可视化操作。先需要使用账号密码连接MySQL,然后创建一个数据库ADMIN,然后可以手动创建表或者选择导入sql文件,也可以通过后面的实体文件自动创建。最终效果如下:

安装相关依赖

安装typeorm及mysql2等相关依赖,typeorm可以将数据库的 sql 操作转化为对象操作:

npm install --save @nestjs/typeorm typeorm mysql2

项目配置

来到app.module.ts中进行数据库的配置,引入TypeOrmModule调用forRoot进行配置。

import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { UserModule } from "./user/user.module";
import { TypeOrmModule } from "@nestjs/typeorm";
@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: "mysql",
      synchronize: true,
      autoLoadEntities: true, //自动加载实体
      host: "localhost",
      port: 3306, // 端口号
      username: "root", // 用户名
      password: "root", // 密码
      database: "admin", //数据库名
      synchronize: true, //是否自动同步实体文件,生产环境建议关闭
    }),
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

当我们将autoLoadEntities设置为 true 的时候,NestJS 会自动加载数据库实体文件xx.entity.ts文件来创建数据表(如果没有的话),比如 user/entities/user.entity.ts,我们简单加一些字段:

import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";

@Entity("user")
export class User {
  @PrimaryGeneratedColumn("uuid")
  id: number; // 标记为主键,值自动生成

  @Column({ length: 30 })
  username: string; //用户名
  @Column()
  password: string; //密码
}

启动项目,然后就会发现自动创建了一个 user 表。

到此为止,mysql和typeorm配置相关内容就完成了。下面进入Redis的编译和使用。

Redis使用

下载Redis源码并编译

前往Download | Redis下载Redis源码,解压后使用make命令进行编译。make成功后会在src文件夹下产生一些二进制可执行文件,包括redis-server、redis-cli等等:

$ find . -type f -executable

./redis-benchmark //用于进行redis性能测试的工具
./redis-check-dump //用于修复出问题的dump.rdb文件
./redis-cli //redis的客户端
./redis-server //redis的服务端
./redis-check-aof //用于修复出问题的AOF文件
./redis-sentinel //用于集群管理

启动redis

启动redis非常简单,进入到Redis源码的src目录,直接./redis-server就可以启动服务端了,还可以用下面的方法指定要加载的配置文件:

./redis-server ../redis.conf


默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。

使用redis客户端

我们直接看一个使用redis-cli启动redis客户端的例子:
$ ./redis-cli
//用set指令来设置key、value
127.0.0.1:6379> set name "roc" 
OK
//来获取name的值
127.0.0.1:6379> get name 
"roc"
//通过客户端来关闭redis服务端
127.0.0.1:6379> shutdown 
127.0.0.1:6379>

Redis可视化插件

我们使用命令行想查看redis中的数据不太方便,所以我们需要一个可视化插件,前面文章已经提到过,安装一个将Database Client的插件,它可以将数据库可视化,同时也可以连接redis。

安装相关依赖

使用代码来操作redis需要安装Redis库,因nest.js官方推荐的redis库年久失修,考虑社区活跃度和稳定性选择@liaoliaots/nestjs-redis和ioredis:

npm install @liaoliaots/nestjs-redis ioredis

由于@liaoliaots/nestjs-redis依赖的nest.js组件版本过旧,npm install的时候会失败,需要在package.json中增加:

"overrides": {
    "@liaoliaots/nestjs-redis": {
      "@nestjs/common": "^10.0.0",
      "@nestjs/core": "^10.0.0"
    },
  },

项目配置

一般我们会给对 redis 的操作单独建一个模块,后面有哪些模块需要使用 redis 直接引入这个模块即可,这里我们将模块命名为 cache,使用 nestcli 命令创建。

在service中我们实现一些常用的Redis操作:

import { InjectRedis } from '@liaoliaots/nestjs-redis'
import { Injectable } from '@nestjs/common'
import Redis from 'ioredis'

@Injectable()
export class CacheService {
    constructor(@InjectRedis() private readonly client: Redis) { }

    getClient(): Redis {
        return this.client
    }

    /* --------------------- string 相关 -------------------------- */

    /**
     *
     * @param key 存储 key 值
     * @param val key 对应的 val
     * @param seconds 可选,过期时间,单位 秒
     */
    async set(key: string, val: string, seconds?: number): Promise<'OK' | null> {
        if (!seconds) return await this.client.set(key, val)
        return await this.client.set(key, val, 'EX', seconds)
    }

    /**
     * 返回对应 value
     * @param key
     */
    async get(key: string): Promise<string | null> {
        if (!key || key === '*') return null
        return await this.client.get(key)
    }

    async del(keys: string | string[]): Promise<number> {
        if (!keys || keys === '*') return 0
        if (typeof keys === 'string') keys = [keys]
        return await this.client.del(...keys)
    }
}

@Global() 装饰器使模块具有全局作用域。CacheModule的CacheService将无处不在,希望注入CacheService的模块将不需要在其导入数组中导入 CacheModule。同时为了注册经过配置的RedisModule,这里使用动态模块来创建自定义的模块,这个模块可以动态注册和配置provider:

import { Module, Global, DynamicModule } from '@nestjs/common';
import { CacheService } from './cache.service';
import { RedisModule, RedisModuleAsyncOptions, RedisModuleOptions } from '@liaoliaots/nestjs-redis'

@Global()
@Module({
  exports: [CacheService],
  providers: [CacheService],
})
export class CacheModule {
  static forRoot(options: RedisModuleOptions, isGlobal = true): DynamicModule {
    return {
      module: CacheModule,
      imports: [RedisModule.forRoot(options, isGlobal)],
      providers: [CacheService],
      exports: [CacheService]
    }
  }

  static forRootAsync(options: RedisModuleAsyncOptions, isGlobal = true): DynamicModule {
    return {
      module: CacheModule,
      imports: [RedisModule.forRootAsync(options, isGlobal)],
      providers: [CacheService],
      exports: [CacheService]
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows中的Git Bash运行conda命令:未找到命令的错误(已解决)

在windows中的Gitbash中 打开激活conda环境&#xff0c;并运行&#xff08;前提是你先安装好git&#xff08;自己去官网下载&#xff09;&#xff09;。 要能够在Gitbash上运行Conda&#xff0c; 临时配置 如果你只是临时用一下&#xff0c;就是临时爽一把&#xff0c;那就按…

独立站建站全攻略:从0到1打造专属在线商业平台

独立站建站全攻略&#xff1a;从0到1打造专属在线商业平台 随着互联网的普及和发展&#xff0c;越来越多的企业和个人开始认识到拥有一个独立站的重要性。独立站不仅可以提升品牌形象&#xff0c;还能为企业带来更多的流量和潜在客户。本文将为大家详细介绍独立站建站的全过程…

代码随想录day32--动态规划理论基础

什么是动态规划 动态规划简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点一定要和贪心区别出来&#xff0c;贪心没有状态推导&#xff0c;而是直接从局部直接…

【深度学习】主要提出者【Hinton】中国大会最新演讲【通往智能的两种道路】

「但我已经老了&#xff0c;我所希望的是像你们这样的年轻有为的研究人员&#xff0c;去想出我们如何能够拥有这些超级智能&#xff0c;使我们的生活变得更好&#xff0c;而不是被它们控制。」 6 月 10 日&#xff0c;在 2023 北京智源大会的闭幕式演讲中&#xff0c;在谈到如…

opengles 顶点坐标变换常用的矩阵(九)

文章目录 前言一、opengles 常用的模型矩阵1. 单位矩阵2. 缩放矩阵3. 位移矩阵4. 旋转矩阵二、第三方矩阵数学库1. glm1.1 ubuntu 上安装 glm 库1.2 glm 使用实例1.2.1 生成一个沿Y轴旋转45度的4x4旋转矩阵, 代码实例如下1.2.2 生成一个将物体移到到Z轴正方向坐标为5处的4x4 vi…

K线实战分析系列之七:行情顶部的看跌信号——黄昏星形态

K线实战分析系列之七&#xff1a;行情顶部的看跌信号——黄昏星形态 一、黄昏星形态二、黄昏线总结 一、黄昏星形态 二、黄昏线总结 黄昏星的高点形成阻力位&#xff0c;启明星的低点形成支撑位中间的星线实体与第一根K线的实体跳空区域比较宽&#xff0c;第三根K线覆盖了第一…

SSM项目集成Spring Security 4.X版本 之 加入DWZ,J-UI框架实现登录和主页菜单显示

目录 前言 一、加入DWZ J-UI框架 二、实现登录页面 三、实现主页面菜单显示 前言 大家好&#xff01;写文章之前先列出几篇相关文章。本文内容也在其项目中接续实现。 一. SSM项目集成Spring Security 4.X版本&#xff08;使用spring-security.xml 配置文件方式&#xff…

旅游组团自驾游拼团系统 微信小程序python+java+node.js+php

随着社会的发展&#xff0c;旅游业已成为全球经济中发展势头最强劲和规模最大的产业之一。为方便驴友出行&#xff0c;寻找旅游伙伴&#xff0c;更好的规划旅游计划&#xff0c;开发一款自驾游拼团小程序&#xff0c;通过微信小程序发起自驾游拼团&#xff0c;吸收有车或无车驴…

CentOS安装Redis教程

CentOS安装Redis教程 一、Redis安装包压缩文件下载二、把下载好的Redis安装包压缩文件上传到服务器三、Redis安装四、Redis相关配置五、运行redis并指定配置文件 一、Redis安装包压缩文件下载 下载地址&#xff1a;Redis官网 省事链接奉上&#xff1a;Redis 6.2.14网盘下载链接…

在Linux服务器上部署一个单机项目

目录 一、jdk安装 二、tomcat安装 三、MySQL安装 四、部署项目 一、jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 2. 解压安装包 这里需要解压到usr/local目录下&#xff0c;在这里我新建一个文件夹保存解压后的文件 [r…

ElasticSearch语法

Elasticsearch 概念 入门学习: Index索引>MySQL 里的表(table)建表、增删改查(查询需要花费的学习时间最多)用客户端去调用 ElasticSearch(3 种)语法:SQL、代码的方法(4 种语法) ES 相比于 MySQL&#xff0c;能够自动帮我们做分词&#xff0c;能够非常高效、灵活地查询内…

5.2.鸿蒙LiteOS-M los_dispatch

目录 一、cortex-m4 los_dispatch.S代码分析坚持就有收获 一、cortex-m4 los_dispatch.S代码分析 .syntax unified #.syntax [unified | divided], 指定arm 汇编语法规则 .arch armv7e-m #指定平台, 与命令行参数-march同样的作用 .fpu fpv4-sp-d16 #指定浮点运算…

第九篇【传奇开心果系列】python文本和语音相互转换库技术点案例示例:SpeechRecognitio库开发会议记录和转录工具经典案例

传奇开心果博文系列 系列博文目录python文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、SpeechRecognition库多种语音识别引擎支持示例代码四、SpeechRecognition库实时语音转录示例代码五、SpeechRecognitio库转录文本中提取关键词…

GPT Pilot - 编写 95% 代码的开发工具!

在这篇博客介绍了GPT-pilot的研发细节&#xff0c;原作者将探讨GPT Pilot的技术内核 —— 一款基于GPT-4编写的开发工具&#xff0c;可以生成生产使用代码的应用。 你有没有想过&#xff0c;95%的应用代码&#xff0c;可以由AI编写&#xff0c;就像《钢铁侠》里的贾维斯一样&a…

DAY30--learning English

一、积累 1.budget 2.fabulous 3.strait 4.jut 5.grater 6.fillet 7.fin 8.decay 9.cartilage 10.gill 11.convex 12.concave 13.tender 14.trim 15.workload 16.knuckle 17.crevice 18.skew 19.membrane 20.delicate 二、练习 1.牛津原译 Budget /ˈbʌdʒɪt/ 1.[ CU]the…

一流的财务:搞数据!!!(干货)

“三流财务给数据&#xff0c;二流财务给分析报告&#xff0c;一流财务给....&#xff08;解决方案&#xff09;“这些文章应该很多人都看到过&#xff0c;这个口号粗看好像很有道理&#xff0c;但笔者并不认同&#xff0c;因为大家都忽略了一个重要的概念&#xff1a;数据&…

CrossOver2024国产版虚拟机软件有哪些功能呢?

除了办公应用场景&#xff0c;CrossOver虚拟机软件还可以在以下场景中使用&#xff1a; 设计与开发&#xff1a;对于设计师和开发人员来说&#xff0c;某些特定的Windows设计和开发工具可能在Mac或Linux上没有完美的替代品。此时&#xff0c;他们可以使用CrossOver来运行这些工…

SQL 中如何实现多表关联查询?

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; 在SQL中&#xff0c;多表关联查询是通过使用JOIN操作来实现的&#xff0c;它允许你从两个或多个表中根据相关列的值来检索数据。以下是几种常见的JOIN类型&#xff1a; …

wpf 3d 后台加载模型和调整参数

下载了一个代码&#xff0c;加载obj模型&#xff1b;它的参数在xaml里&#xff0c;模型加载出来刚好&#xff1b; 然后加载另一个obj模型&#xff1b;加载出来之后大&#xff0c;偏到很高和左的位置&#xff1b; 它之前的摄像机位置&#xff0c; Position"9.94759830064…

Apache celeborn 安装及使用教程

1.下载安装包 https://celeborn.apache.org/download/ 测0.4.0时出现https://github.com/apache/incubator-celeborn/issues/835 2.解压 tar -xzvf apache-celeborn-0.3.2-incubating-bin.tgz 3.修改配置文件 cp celeborn-env.sh.template celeborn-env.shcp log4j2.xml.…