IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Nest.js实战开发(第一弹)-连接mysql -> 正文阅读

[大数据]Nest.js实战开发(第一弹)-连接mysql

为什么选用nest.js开发?

?之前也是使用过egg.js写过增删改查,对于egg.js的给我的体验感约束性很强,文档也很完善,但是对于Typescript的支持并不好,都2022年了,ts的应用也该很广泛了吧,所以此次开发选择了nest.js~

安装依赖包

npm install @nestjs/typeorm typeorm mysql2 -S

建立配置

?对于我们连接mysql的账密以及ip,我们将其存储在.env/.env.prod中。我们在根目录创建config文件夹,并创建env.ts,代码如下:

import * as fs from 'fs';
import * as path from 'path';
// 判断是否是开发环境
const isProd = process.env.NODE_ENV === 'production';

function parseEnv() {
  // 引入文件
  const localEnv = path.resolve('.env');
  // 引入线上环境文件
  const prodEnv = path.resolve('.env.prod');

  if (!fs.existsSync(localEnv) && !fs.existsSync(prodEnv)) {
    throw new Error('缺少环境配置文件');
  }
  // 判断是开发环境还是线上环境从而返回对应的filePath	
  const filePath = isProd && fs.existsSync(prodEnv) ? prodEnv : localEnv;
  return { path: filePath };
}
export default parseEnv();

创建.env/.env.prod文件,如下:

# 数据库地址
DB_HOST=ip地址
#  数据库端口
DB_PORT=3306
#  数据库登录名
DB_USER=root
#  数据库登录密码
DB_PASSWD=password
#  数据库名字
DB_DATABASE=db_name

引入此配置,并创建连接

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

import { ConfigService, ConfigModule } from '@nestjs/config';
// env文件
import envConfig from '../config/env';
// 数据库
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './user/user.module';
@Module({
  imports: [
    // 将env文件注册
    ConfigModule.forRoot({
      isGlobal: true, // 设置为全局
      envFilePath: [envConfig.path],
    }),
    TypeOrmModule.forRootAsync({
      // 引入
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: async (configService: ConfigService) => ({
        type: 'mysql', // 数据库类型
        host: configService.get('DB_HOST', '默认值'), // 主机,默认为localhost
        port: configService.get<number>('DB_PORT', 3306), // 端口号
        username: configService.get('DB_USER', '默认值'), // 用户名
        password: configService.get('DB_PASSWORD', '默认值'), // 密码
        database: configService.get('DB_DATABASE', '默认值'), //数据库名
        timezone: '+08:00', //服务器上配置的时区
        synchronize: true, //根据实体自动创建数据库表, 生产环境建议关闭
        entities: ['dist/**/*.entity{ .ts,.js}'], // 数据表实体
      }),
    }),
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

创建服务

# 生成user模块
nest g mo user  
# 生成相应的service
nest g s user
# 生成相应的controller
nest g co user

执行对应的命令后我们可以删除其测试文件,接下来我们需要创建其对应的实体文件(这个时候数据库是已经创建好的),在user文件夹创建user.entity.ts文件,其内容如下:

//    posts/posts.entity.ts
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
// cd_user为我们所选择的数据库表
@Entity('cd_user')
export class User {
  @PrimaryGeneratedColumn()
  id: number; // 标记为主列,值自动生成

  @Column({ length: 50})
  username: string;

  @Column({ length: 20 })
  gender: string;
}

对应的user.service.ts文件:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
// 引入实体表
import { User } from './user.entity';

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}
  // 找出表内全部项
  findAll() {
    return this.usersRepository.find();
  }
}

对应的user.controller.ts文件:

import { Body, Controller, Get, Post } from '@nestjs/common';
import { XCommonRet } from 'xmcommon';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  // 此时访问的路径为user/all
  @Get('all')
  // @HttpCode(200)
  async all() {
  	// 固定了返回结构~
    const r = new XCommonRet();
    r.setData(await this.userService.findAll());
    return r;
  }
}

对应的user.module.ts文件:

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from './user.controller';
import { User } from './user.entity';
// 创建了User.module.ts,注意整个module需要在app.modules.ts引入哦~
@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  controllers: [UserController],
  exports: [TypeOrmModule], 
})
export class UserModule {}

结束

?对于curd,以及其他对数据库的操作,想要了解更深的同学可以去看一下typeorm的文档,本文章只介绍如何连接mysql啦~

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:32:03  更:2022-03-30 18:32:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:20:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码