从零搭建项目(10) --- 后端: 使用TypeORM和MySQL

我的博客地址

正式地址
测试地址
前端源码
后端源码

文章目录

  1. 项目及其技术栈介绍
  2. 前端: 项目初始化
  3. 前端: 使用Sass和Antd
  4. 前端: 开发体验优化
  5. 前端: 搭建路由和状态管理
  6. 前端: 支持Axios
  7. 前端: 打包与环境变量设置
  8. 前端: 团队代码规范
  9. 后端: 项目初始化和使用Koa相关
  10. 后端: 使用TypeORM和MySQL
  11. 部署: 使用nginx部署前端项目
  12. 部署: 后端部署
  13. 部署: 使用jenkins自动化部署

前言

本章将会通过一个登录注册的例子来介绍MySQL以及TypeORM的使用,因为在不同系统下的MySQL下安装方式不同,所以安装MySQL的部分会一笔带过。

  1. 安装MySQL
  2. 安装使用workbench,并创建用户和数据库
  3. 安装并使用TypeORM
  4. 编译出node可运行的js文件

安装MySQL

这一部分建议查看这篇文章,如果是win或者mac用户建议通过连接下载资源包安装。 如果你使用的Ubuntu系统,我会在后续章节介绍如何安装,或者自行谷歌也行。

安装使用workbench,并创建用户和数据库

安装完毕后,我们可以通过在命令行输入mysql -uroot -p,然后输入你的初始化密码(安装的时候会有这个密码给你,也会提示你修改密码,这个密码就是root用户的密码),进入到mysql中:

image.png

在这里我们可以通过命令进行一系列的操作(命令的结尾必须输入分号),比如查看有哪些数据库:
image.png

又或者进入到某个数据库中查看里面有哪些表:
image.png

但是在这里进行操作十分不方便,比如下面这个创建表的命令:
image.png

这时候我们就需要使用workbench这个图形化数据库设计建模工具了:
image.png

  • 创建数据库用户
    在使用workbench之前,我们先要创建一个数据库用户,一切操作都在这个用户的范围内进行,因为我们一般不在root用户下进行操作,另外TypeORM的自动建表功能也无法在root用户下进行。
    首先在命令行登录root用户:


    image.png

    然后使用如下命令创建一个用户

CREATE USER '你的用户名'@'ip地址,本地的话填localhost,%则是允许任意主机登录' IDENTIFIED BY '密码';

image.png

接着我们设置该用户拥有的权限,这里设置的是拥有全部数据库和表的所有操作权限:
GRANT ALL ON *.* TO 'oxc'@'%';
image.png

设置完权限后记得使用这个命令让他生效
flush privileges;
image.png

  • 安装并配置workbench
    1. 我们直接去官网下载页面下载然后安装即可,安装完毕后我们打开它,mac版的界面长这样,win系统的会有点不一样,但是也大同小异:

      image.png

    2. 然后我们点击那个+号:


      image.png

      在弹出的框框里面输入必要的连接信息:


      image.png

      记得点一下这个按钮输入密码:
      image.png

      之后测试连接,成功后点ok:


      image.png

      之后下面就会多出一个选项,直接点击即可建立数据库连接:
      image.png

      image.png
  • 创建一个数据库
    mysql创建数据库的方式非常简单,我们在workbench中输入create database test命令就创建了一个名为test的数据库,使用use test后就能够使用这个数据库了:
    image.png

在上面步骤都完成后,我们进入下一步,安装并使用TypeORM。

安装并使用TypeORM

  • 什么是TypeORM
    typeorm是一款ORM(对象关系映射)框架,能够非常方便的与TypeScript,JavaScript一起使用,并且能够根据自定的entity/model自动创建表,与他类似的还有sequelize。

  • 安装
    我们可以使用npm来安装typeorm,另外还需要安装typeorm与mysql之间进行连接的连接器mysql2
    npm i -S typeorm mysql2

  • 配置
    在项目根目录新建ormconfig.js文件,用于写typeorm的配置,内容包含所选数据库,数据库账号密码等,详细请看注释:

    image.png

    之后去到src/index.ts中,从typeorm中引入并使用createConnection方法:
    image.png

    这样就算是配置好了,但此时还不能直接使用,需要创建entity

  • 创建entity
    按照之前ormconfig.js中的配置,我们去src目录下新建一个名为entity的文件夹:

    image.png

    在其下新建user.ts文件,并新建User类作为model,里面的PrimaryGeneratedColumn是自增id的意思:
    image.png

    需要注意的是,如果你有上面那样的报错,请到tsconfig.json中把装饰器开关打开并关闭对于null的检测:
    image.png

    之后我们重新npm run dev,去到workbench中就能够看到,对应user这个model的表已经被建好了,我们可以通过select * from user获取到里面的信息:
    image.png

    此时user表中还没有数据。

这时候我们的TypeORM就配置好了,接下来将会通过编写一个简单的注册登录逻辑将前端、后端、数据库之间的数据传输串通起来,并熟悉一些TypeORM的api

注册登录功能

  • 前端部分
    首先我们去到src/services/api.ts中添加注册登录的api:

    image.png

    然后在containsers/views/PageA组件中添加界面和逻辑代码:
    code.png

    image.png

    该段代码在登陆成功后将会显示一个欢迎的字段。

  • 后端部分
    前端部分完成后,我们去到后端src/controller/test.ts中添加注册和登录的接口方法:

    image.png

    在TypeORM中,可以使用save保存一个实例数据入表,可以通过findfindOne等方法查找数据,具体需要自行谷歌他的文档。
    然后在src/routers/index.ts中添加对应路由:
    image.png

    这样登录注册的接口就完成了。

  • 测试结果
    我们去到页面注册一个账号:


    image.png

    然后去workbench中查看是否存在这个数据:


    image.png

    当存在这个数据时,就说明注册接口已经跑通了。

我们再来登陆一下:


image.png

有结果返回,说明登录接口也跑通了,这证明从前端 -> 后端 -> 数据库直接的数据传输是通畅无阻的了。

  • 注意
    以上的注册登录接口只是用作简单测试所用,在一个正常的项目中,密码入库之前是会进行加密的,而校验的也是加密后的密码,所以千万别把明文密码入库了。

编译出可运行的js文件

通常在服务器中,我们会使用pm2进行项目的启动,但是pm2一般运行的js文件,而我们使用的是ts进行代码的编写,所以需要将ts代码先编译成js文件,再使用pm2进行启动(当然也可以直接配置pm2使用ts-node来运行项目,但是需要先在服务器中安装ts-node)。

  • 要将ts文件编译为js文件,我们首先需要去tsconfig.json中配置编译后文件的存放路径,在本例中设定为根目录中的dist文件夹:

    image.png

  • 然后去到package.json中添加编译命令,使用tsc命令即可进行编译:

    image.png

    运行该命令后得出:
    image.png

    之后pm2运行的就是dist文件夹中的index.js

后记

完成该篇文章后,我们的后端搭建也基本ok了,下一步将会介绍部署相关的知识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容