当前位置: 首页 > wzjs >正文

品牌高端网站制作机构百度关键词seo外包

品牌高端网站制作机构,百度关键词seo外包,论坛型网站建设,湘潭网站建设 多少钱磐石网络个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
NestJS(一)Docker入门
NestJS(二)NestJS——创建项目、编写User模块
NestJS(三)TypeScript入门
NestJS(四)编程思想——FP、OOP、FRP、AOP、IOC、DI、MVC、DTO、DAO
NestJS(五)NestJS——多环境配置方案(dotenv、config、@nestjs/config、joi配置校验)

文章目录

    • ORM
    • 数据库
    • 连接数据库
    • 适配多环境配置
    • 总结

ORM

ORM(Object Relational Mapping):对象关系映射,其主要作用是在编程中,把面向对象的概念跟数据库中的概念对应起来。

在这里插入图片描述


数据库

关系型:MySQL、Oracle、SQL Server、Access、SQLite

非关系型:MongoDB、Redis、Hbase、Memcache

关系型数据库非关系型数据库
易于维护、使用方便、支持复杂查询效率高易于扩展、大文件存储、查询速度快
读写性能差,灵活性差复杂计算与联合查询效率低
各类业务系统、管理系统、安全性较高的场景多格式&海量数据、分布式消息系统、统计排行

连接数据库

安装 @nestjs/typeorm、typeorm、mysql2

pnpm i --save @nestjs/typeorm
pnpm i --save typeorm
pnpm i --save mysql2

创建 docker-compose.yml 文件,添加 mysql 及 Adminer 镜像。

services:db:image: mysql # 使用官方 MySQL 镜像restart: always # 容器崩溃时自动重启environment: # 配置 MySQL 环境变量MYSQL_ROOT_PASSWORD: example # MySQL root 用户的密码ports:- 3090: 3060 # 将主机的 3090 端口映射到容器的 3306 端口(MySQL 默认端口)adminer:image: adminer # 使用官方 Adminer 镜像restart: always # 容器崩溃时自动重启ports:- 8090: 8080 # 将主机的 8090 端口映射到容器的 8080 端口(Adminer 默认端口)

使用如下命令拉取镜像

docker-compose up -d

在这里插入图片描述

在这里插入图片描述

app.module.ts 文件中进行 typeorm 相关配置,连接数据库

import { Module } from "@nestjs/common";
import { UserModule } from "./user/user.module";
import { ConfigModule } from "@nestjs/config";
// 导入 dotenv 库,用于解析 .env 文件
import * as dotenv from "dotenv";
import * as Joi from "joi"; // 用于验证环境变量的库
import { TypeOrmModule } from "@nestjs/typeorm";/*** 动态生成环境变量文件路径:* - 如果系统环境变量 `NODE_ENV` 存在(如 production、development、test),则加载对应的 `.env.[NODE_ENV]` 文件* - 默认使用 `.env.development` 文件*/
const envFilePath = `.env.${process.env.NODE_ENV || "development"}`;@Module({imports: [ConfigModule.forRoot({isGlobal: true, // 将配置模块声明为全局模块,所有其他模块均可直接注入 ConfigServiceenvFilePath, // 指定环境变量文件路径(根据 NODE_ENV 动态加载)/*** 自定义配置加载器:* - 显式加载默认的 `.env` 文件,作为兜底配置* - 如果 `envFilePath` 和 `.env` 文件中存在相同的变量,`envFilePath` 的变量会覆盖 `.env` 中的值*/load: [() => dotenv.config({ path: ".env" })],/*** 使用 Joi 验证环境变量:* - 定义环境变量的结构和默认值* - 确保环境变量的值符合预期(如类型、范围等)*/validationSchema: Joi.object({NODE_ENV: Joi.string().valid("development", "production", "test") // 限制 NODE_ENV 的合法值.default("development"), // 默认值为 "development"DB_PORT: Joi.number().default(3306), // 数据库端口,默认值为 3306DB_URL: Joi.string().domain(), // 数据库 URL,必须是合法的域名DB_HOST: Joi.string().ip(), // 数据库主机地址,必须是合法的 IP 地址}),}),// 新增内容----------------------------------------------------TypeOrmModule.forRoot({type: "mysql", // 数据库类型host: "localhost", // 数据库主机地址port: 3090, // 数据库端口username: "root", // 数据库用户名password: "example", // 数据库密码database: "test", // 数据库名称entities: [], // 实体类数组synchronize: true, // 是否自动同步数据库结构logging: ["error", "warn"], // 日志级别}),// -----------------------------------------------------------UserModule, // 导入用户模块],controllers: [], // 控制器(当前为空)providers: [], // 服务提供者(当前为空)
})
export class AppModule {}

使用 npm start:dev 命令启动项目,若没有任何报错,则说明连接成功。

在这里插入图片描述


适配多环境配置

GitHub 提交记录

上面连接数据库的方式是无法适配多环境的。接下来,我们进行多环境的适配。

config.const.ts 文件中修改枚举。

export enum ConfigEnum {DB_TYPE = "DB_TYPE",DB_HOST = "DB_HOST",DB_PORT = "DB_PORT",DB_DATABASE = "DB_DATABASE",DB_USERNAME = "DB_USERNAME",DB_PASSWORD = "DB_PASSWORD",DB_SYNC = "DB_SYNC",
}

修改 .env 文件

# 公共配置文件
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3090DB_SYNC=false

修改 .env.development 文件,更改开发环境配置

DB_DATABASE=test
DB_HOST=127.0.0.1
DB_PORT=3090
DB_USERNAME=root
DB_PASSWORD=exampleDB_SYNC=true

修改 .env.production 文件,更改生产环境配置(此处为随便写的)

DB_DATABASE=proddb
DB_HOST=zahuopu.com
DB_PORT=3090
DB_USERNAME=root
DB_PASSWORD=long-random-passwordDB_SYNC=true

修改 app.module.ts 文件内容如下:

import { Module } from "@nestjs/common";
import { UserModule } from "./user/user.module";
import { ConfigModule, ConfigService } from "@nestjs/config";
// 导入 dotenv 库,用于解析 .env 文件
import * as dotenv from "dotenv";
import * as Joi from "joi"; // 用于验证环境变量的库
import { TypeOrmModule, TypeOrmModuleOptions } from "@nestjs/typeorm";
import { ConfigEnum } from "./enum/config.const"; // 导入配置枚举/*** 动态生成环境变量文件路径:* - 如果系统环境变量 `NODE_ENV` 存在(如 production、development、test),则加载对应的 `.env.[NODE_ENV]` 文件* - 默认使用 `.env.development` 文件*/
const envFilePath = `.env.${process.env.NODE_ENV || "development"}`;@Module({imports: [ConfigModule.forRoot({isGlobal: true, // 将配置模块声明为全局模块,所有其他模块均可直接注入 ConfigServiceenvFilePath, // 指定环境变量文件路径(根据 NODE_ENV 动态加载)/*** 自定义配置加载器:* - 显式加载默认的 `.env` 文件,作为兜底配置* - 如果 `envFilePath` 和 `.env` 文件中存在相同的变量,`envFilePath` 的变量会覆盖 `.env` 中的值*/load: [() => dotenv.config({ path: ".env" })],/*** 使用 Joi 验证环境变量:* - 定义环境变量的结构和默认值* - 确保环境变量的值符合预期(如类型、范围等)*/validationSchema: Joi.object({NODE_ENV: Joi.string().valid("development", "production", "test") // 限制 NODE_ENV 的合法值.default("development"), // 默认值为 "development"DB_PORT: Joi.number().default(3306), // 数据库端口,默认值为 3306DB_HOST: Joi.string().ip(), // 数据库主机地址,必须是合法的 IP 地址DB_TYPE: Joi.string().valid("mysql", "postgres"), // 数据库类型,不能为空DB_DATABASE: Joi.string().required(), // 数据库名称,不能为空DB_USERNAME: Joi.string().required(), // 数据库用户名,不能为空DB_PASSWORD: Joi.string().required(), // 数据库密码,不能为空DB_SYNC: Joi.boolean().default(false), // 是否自动同步数据库结构,默认值为 false}),}),TypeOrmModule.forRootAsync({imports: [ConfigModule], // 导入 ConfigModule 以获取配置inject: [ConfigService], // 注入 ConfigServiceuseFactory: (configService: ConfigService) =>({type: configService.get(ConfigEnum.DB_TYPE), // 数据库类型host: configService.get(ConfigEnum.DB_HOST), // 数据库主机地址port: configService.get(ConfigEnum.DB_PORT), // 数据库端口username: configService.get(ConfigEnum.DB_USERNAME), // 数据库用户名password: configService.get(ConfigEnum.DB_PASSWORD), // 数据库密码database: configService.get(ConfigEnum.DB_DATABASE), // 数据库名称entities: [], // 实体类数组synchronize: configService.get(ConfigEnum.DB_SYNC), // 是否自动同步数据库结构logging: ["error", "warn"], // 日志级别}) as TypeOrmModuleOptions,}),UserModule, // 导入用户模块],controllers: [], // 控制器(当前为空)providers: [], // 服务提供者(当前为空)
})
export class AppModule {}

至此,即完成多环境的配置。


总结

本篇文章,我们学习了学习了 ORM 工具;关系型数据库和非关系型数据库的区别;最后使用 Docker 拉取镜像,实现了 TypeORM 连接 MySQL 数据库。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. DeepSeek
  2. NestJS 从入门到实战

在这里插入图片描述

http://www.dtcms.com/wzjs/510803.html

相关文章:

  • 做网站分几个步骤企业培训考试app
  • wordpress企业网站制作看到招聘游戏推广员千万别去
  • 济宁网架公司昆明自动seo
  • 连云港网站建设案例seo百度排名优化
  • 创建手机网站模版餐饮品牌全案策划
  • 男女真实做性视频网站seo网站快速排名外包
  • 网站建设新趋势steam交易链接在哪看
  • 有哪些免费做外贸网站河南新闻头条最新消息
  • 高端网站欣赏黑客入侵网课
  • 广州哪家网站建设公司好全媒体运营师报考条件
  • 网站还未被收录可以做推广吗培训机构学校
  • 章莹颖被卖做性奴网站软文推广发布平台
  • 自己做一网站_多做宣传.谷歌google play下载
  • 做拍卖网站有哪些无锡网站建设方案优化
  • 酒店网站建设因素淘宝关键词排名优化技巧
  • php电子商务网站开发实例百度 营销中心
  • 忘记了wordpress登录密码忘记seo站长常用工具
  • 网站建设套餐河南百度推广公司
  • 网站功能建设描述书搜索引擎优化的策略主要有
  • 网站必须做API接口吗运营推广
  • 自动优化网站软件没有了淘宝客推广平台
  • 网站建设玖金手指排名11策划公司是做什么的
  • 济南企业做网站公司seo是指什么意思
  • 视频网站采集规则宁波seo推广服务电话
  • wordpress选项卡怎么设置搜索引擎营销优化的方法
  • 网站建设需要提供哪些资料深圳百度推广公司
  • 深圳网站建设与制作公司按效果付费的网络推广方式
  • directory wordpress西安优化网站公司
  • 杭州网站建设优化企业品牌推广策划方案
  • 郑州营销网站公司地址奶盘seo伪原创工具