一、数据库

前端发送api请求的流程

  • 通过API发送请求,到model进行业务处理,将数据存到或在MYSQL查询,将数据一并给KOA服务器请求,最后将请求的结果返回给客户端

关系型数据库、非关系型数据库

关系型数据库

mysql /oracle/sql server/sqlite
我还有一篇文章 介绍了 关系型数据库和非关系型数据的数据结构 –红黑树-二叉树-B树

1.首先了解一下 什么是关系型数据库?
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组
织。优点:
1、易于维护:都是使用表结构,格式一致
2、使用方便SQL语言通用,可用于复杂查询;
3、复杂操作支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

非关系型数据库

redis / hbase /mongoDB /CouchDB /Neo4J

什么非关系型数据库呢?

非关系型数据库严格上不是一加粗样式种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等

优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单基本都是开源软件

缺点:
1、不提供sql支持,学习和使用成本较高
2、无事务处理
3、数据结构相对复杂,复杂查询方面稍欠。

非关系型数据库的分类和比较:

1、文档型
2、key-value型
3、列式数据库
4、图形数据库

二、数据库使用

  • 采用的是MySQL+图形化界面 navicat
  • koa采用sequelize插件来连接数据库与程序,并配置一些数据库的相关参数

一些基本概念

  • 主键:数据库中一定要有的,且必须满足两个条件:1. 不重复,2. 不为空
  • 这里接下来将使用用户的id编号作为主键,且采用自动增长的方式编号(这样就不重复了),当然也可以自己写一套id编号系统
  • 在微信中,一个用户进入一个小程序的openid是唯一的,但不代表一个用户只有一个openid,用户唯一的只有unionid

sequelize使用文件

  • 将用户信息等东西都放到config文件里,这个连接数据库的文件放到core/中,这是整个项目连接数据库的文件,后续操作不同表的文件都要引入它
  • 同时在这个文件里也要创建(同步)数据库,调用sequelize的sync函数,当然要通过配置一些参数来选择(如force: true 合并当前数据库等)
const Sequelize = require('sequelize')
const {dbName,host,port,user,password
} = require('../config/config').databasesequelize.sync({force: true})const sequelize = new Sequelize(dbName, user, password, {dialect: 'mysql',host,port,logging: true,timezone: '+08:00'
})

操作数据库

  • 在app/modules下创建文件,用来管理用户的数据库,引入刚刚的文件
  • 里面建立User类继承sequelize中的Model类,调用静态方法init来初始化,设定好一些参数
  • 初始化表中的信息什么的(具体看sequelize官方文档),记得导出哦
const {sequelize} = require('../../core/db')
const {Sequelize, Model} = require('sequelize')class User extends Model {}({id: {type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true},nickname: ,email: {type: ,unique: true},password: ,openid: {type: ,unique: true},test1:
}, {sequelize})module.exports = {User}
  • 之后所有对数据库的增删改查操作都利用Model来进行,也就是这里导出出去的User类

    • 比如插入条目操作,在文件中导入这个文件 moduls/ 文件中的User,调用 (对象)即可
    • 还有很多其他操作,具体可以看sequelize官方文档(但返回的都是Promise哦)

密码加密(bcrydptjs库)

  • 这时一个用来给密码加密的库,这里说一下基本操作和一点点小原理
  • 先引入bcryptjs库
  • 生成salt盐,这个salt就是用来给密码加密的,中间传入一个参数,默认是10,是加密的成本,越大的话产生的密码安全性就越高 破解时需要的成本也就越高,同时耗费服务器的资源也越多
const bcryptjs = require('bcryptjs')
const salt = (10)
const psw = ((''), salt)
  • 且当密码相同的时候,用salt加密出来的密码也是不同的(在一定程度上防范了彩虹攻击)

密码加密方法的位置

  • 这里可以选择在获取到password的时候进行加密,但也可以将这个过程直接放到Model(Sequelize下的一个类 专门来进行数据库操作的)中,也就是在 modules/ 文件中初始化User类中数据(数据库表中数据)的时候:
password: {type: ,set (val) {// 这里有一个set方法const salt = (10)const psw = (val, salt)('password', psw)}}
  • 这里其实用到了观察者模式,一直在看password有没有变化,然后初始化的时候直接调用这个函数了

endnote初始化数据库支持_服务端编程——数据库(MySQL、sequelize) - 天生笑点低你奈我何...相关推荐

  1. Nodejs服务端编程基础

    为什么要学习后端编程: 目前市场上的需求,要求前端人员掌握后端编程   方便和后端开发人员进行交互   能独立开发完整系统,成为全栈工程师 后端编程做什么: 根据客户端请求,处理业务逻辑, 响应用户数 ...

  2. 《Linux多线程服务端编程:使用muduo C++网络库》书摘6.6.2节

    6.6.2 常见的并发网络服务程序设计方案 W. Richard Stevens 的<UNIX 网络编程(第2 版)>第27 章"Client-ServerDesign Alte ...

  3. 急速rust服务器管理_Rust 与服务端编程的碎碎念

    Rust 是 Mozilla 推出的一门系统编程语言,非常看重内存安全,是一门非常优秀的语言.Mozilla 用它构建了其下一代的浏览器内核 servo,其工程能力毋庸置疑. 那么,Rust在服务端编 ...

  4. Rust 与服务端编程的碎碎念

    Rust 与服务端编程的碎碎念 https://zhuanlan.zhihu.com/p/30028047 Rust 是 Mozilla 推出的一门系统编程语言,非常看重内存安全,是一门非常优秀的语言 ...

  5. PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)

    Postgres2015全国用户大会将于11月20至21日在北京丽亭华苑酒店召开.本次大会嘉宾阵容强大,国内顶级PostgreSQL数据库专家将悉数到场,并特邀欧洲.俄罗斯.日本.美国等国家和地区的数 ...

  6. 《Linux多线程服务端编程:使用muduoC++网络库》学习笔记

    文章目录 第1章 线程安全的对象生命期管理 1.1 当析构函数遇到多线程 1.1.1 线程安全的定义 1.1.3 线程安全实例 1.2 对象的创建很简单 1.3 销毁很难 1.4 线程安全的Obser ...

  7. postgresql最全整理资料,PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)

    转载自:http://blog.163.com/digoal@126/blog/static/16387704020141229159715/ 希望通过这些视频帮到一些朋友, 同时对视频中的错误点烦请 ...

  8. 新书预告:《Linux 多线程服务端编程——使用 muduo C++ 网络库》

    看完了 W. Richard Stevens 的传世经典<UNIX 网络编程>, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下 ...

  9. VC++套接字、数据库、文件读写综合应用-客户端读取文件套接字接收服务端写入数据库

    开发一个应用:套接字连接:客户端读取文件:服务端接收后:写入数据库:模拟某些真实环境: 一 首先实现套接字收发 效果如上:代码见下: 二 服务端添加数据库操作代码 界面如下: 三 客户端读取文件 效果 ...

最新文章

  1. Ext JS Designer 1.0.5 发布
  2. 机器物联网的四大价值流
  3. JDK14性能管理工具:jmap和jhat使用介绍
  4. 计算机应用虚拟仿真实验答案,虚拟仿真 实验教学+.ppt
  5. 利益相关者软件工程_改善开发人员团队与非技术利益相关者之间交流的方法
  6. Cookie中不能有空格_前端小贴士 -- 全面了解Cookie
  7. Python __name__ == ‘__main__’详细解释-Python零基础入门教程
  8. 计算机专业技能高考试题素材,计算机技能高考模拟试题
  9. 【Python】实现输出成绩最高或最低分的学生姓名以及低于平均分的学生姓名
  10. linux虚拟机 dev sda2,虛擬機linux下 /dev/sda2 滿了怎么辦,測試用過,真實可行
  11. iOS CoreData版本升级和数据库迁移
  12. lisp函数大全 微盘_LISP函数大全
  13. (pytorch)yolov3训练自己的模型
  14. Linux配置本地/外网访问Apache服务器,手把手教你搭建Ngrok——以小米球Ngrok为例
  15. 少儿编程app排名_终于明白少儿编程软件哪个好
  16. 【idea插件开发】从0入门idea插件开发,idea插件开发教程,如何开发idea插件
  17. 哔哩哔哩2020届秋招数据分析师面试第一轮(2019.8.8)
  18. matlab 白色变红色
  19. 【MySQL】表操作和库操作
  20. 修改linux中@后的名字

热门文章

  1. 个人博客代码_Solo小众开源博客系统:手把手教你搭建自己的博客系统
  2. javascript控制html高,Javascript可以控制css吗?
  3. Linux Shell脚本编程--grep命令
  4. 我删删删删库了,要跑路吗?
  5. 这是一位川大零基础转行 Python 的人生勇士
  6. php框架控制器是什么意思,控制器定义
  7. python怎么编写视觉识别_Python视觉识别--OpenCV色彩空间\图像运算\ROI(四)
  8. mysql left join两个表,mysql left join 多个表
  9. 为什么要使用openstry_为什么要使用双屏办公?
  10. 100个人搬100块砖C语言,姓氏名人故事:一百块砖搬出搬进