内容:

1.node连接数据库

2.数据库常用操作

3.数据库实例 - 用户注册、登陆

1.node连接数据库

(1)下载mysql模块

(2)使用mysql模块连接数据库

let db=mysql.createConnection({host, port, user, password, database});

这样连接也有缺陷:连接会一直占着数据库,别的无法在此连接结束之前连接数据库,对于此我们可以使用连接池:

  1. // 连接池
  2. let db = mysql.createPool(配置)

实例:

  1. const mysql = require('mysql')
  2.  
  3. // 普通连接
  4. // let db = mysql.createConnection({host: 'localhost', user: 'root', password: 'root', port: 3306, database: 'node'})
  5. // 连接池
  6. let db = mysql.createPool({host: 'localhost', user: 'root', password: 'root', port: 3306, database: 'node'})

2.数据库常用操作

(1)node的mysql数据库操作

db.query(sql, (err, data)=>{});

  1. db.query(`INSERT INTO user_table (ID, name, gender, chinese, math, english) VALUES(0, 'saf', '女', 100, 100, 100);`, function (err, data) {
  2. if(err) {
  3. console.log('错了', err)
  4. }
  5. else {
  6. console.log(data)
  7. }
  8. })

(2)SQL基本使用

  1. SQL
  2. 4大查询
  3. 1. INSERT
  4. INSERT INTO (字段列表) VALUES(值列表)
  5.  
  6. INSERT INTO user_table (ID, name, gender, chinese, math, english) VALUES(0, 'wyb', '男', 75, 88, 69);
  7.  
  8. 2. DELETE
  9. DELETE FROM WHERE 条件
  10.  
  11. DELETE FROM user_table WHERE ID=3;
  12.  
  13. 3. UPDATE
  14. UPDATE SET 字段=值, 字段2=值2, ... WHERE 条件
  15.  
  16. UPDATE user_table SET chinese=100 WHERE ID=2;
  17.  
  18. 4. SELECT
  19. SELECT 字段列表 FROM WHERE 条件
  20.  
  21. SELECT name, gender FROM user_table WHERE ID=2;

3.数据库实例 - 用户注册、登陆

(1)项目需求

  1. 用户注册、登陆:
  2. 1.数据库结构(数据字典)
  3. 2.接口格式(接口文档)
  4.  
  5. 1.数据库结构
  6. ID username password
  7.  
  8. 2.接口 --》 RESTful
  9. 注册:
  10. /reg?user=xxx&pass=xxx
  11. =>{err: 0, msg: '原因'}
  12.  
  13. 登陆:
  14. /login?user=xxx&pass=xxx
  15. =>{err: 0, msg: '原因'}

(2)实现

前端代码存在项目下的www文件夹中,后端代码位于项目根目录下的server.js中

前端代码:

  1. <!-- author: wyb -->
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>数据库版登陆注册</title>
  8. <!-- 引入jQuery -->
  9. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  10. <style>
  11.  
  12. </style>
  13. </head>
  14. <body>
  15.  
  16. 用户名: <input type="text" id="user"> <br>
  17. 密码: <input type="password" id="pass"> <br>
  18. <input type="button" value="注册" id="btn_reg">
  19. <input type="button" value="登陆" id="btn_login">
  20.  
  21. <script>
  22. /*
  23. // 前后端接口:
  24. 用户注册:
  25. /reg?user=xxx&pass=xxx
  26. =>{error: 0, msg: '原因'}
  27.  
  28. 用户登陆:
  29. /login?user=xxx&pass=xxx
  30. =>{error: 0, msg: '原因'}
  31. */
  32. $(function () {
  33. // 注册
  34. $('#btn_reg').click(function () {
  35. $.ajax({
  36. url: '/reg',
  37. data: {user: $('#user').val(), pass: $('#pass').val()},
  38. dataType: 'json',
  39. success(json){
  40. if(json.err){
  41. alert("error: " + json.msg)
  42. } else {
  43. alert("register success")
  44. }
  45. },
  46. error(){
  47. alert("fail")
  48. }
  49. })
  50. })
  51.  
  52. // 登陆
  53. $('#btn_login').click(function () {
  54. $.ajax({
  55. url: '/login',
  56. data: {user: $('#user').val(), pass: $('#pass').val()},
  57. dataType: 'json',
  58. success(json){
  59. if(json.err){
  60. alert("error: " + json.msg)
  61. } else {
  62. alert("login success")
  63. }
  64. },
  65. error(){
  66. alert("fail")
  67. }
  68. })
  69. })
  70. })
  71. </script>
  72.  
  73. </body>
  74. </html>

后端代码: 

  1. const http = require('http')
  2. const mysql = require('mysql')
  3. const fs = require('fs')
  4. const url = require('url')
  5. const zlib = require('zlib')
  6. const crypto=require('crypto')
  7.  
  8. const _key='sadfslekrtuew5iutoselgdtjiypoydse4ufhs.edtyo;s8te4arfeliawkfhtsie5tlfia;sefdshroiupeoutwyeli5gurse;ihf';
  9.  
  10. function md5(str){
  11. let obj=crypto.createHash('md5')
  12. obj.update(str);
  13.  
  14. return obj.digest('hex')
  15. }
  16.  
  17. function md5_2(str){
  18. return md5(md5(str)+_key);
  19. }
  20.  
  21. function log() {
  22. console.log.apply(console, arguments)
  23. }
  24.  
  25. // 连接池
  26. let db = mysql.createPool({host: 'localhost', user: 'root', password: 'root', port: 3306, database: 'node'})
  27.  
  28. let server = http.createServer(function (req, res) {
  29. let {pathname, query} = url.parse(req.url, true)
  30. log(pathname, query)
  31. let {user, pass} = query
  32. log(user, pass)
  33.  
  34. // 接口
  35. switch (pathname){
  36. // 注册:
  37. case '/reg':
  38. // 校验数据
  39. if(!user){
  40. res.write('{"err": 1, "msg": "username can\'t be null!"}')
  41. res.end()
  42. }else if(!pass){
  43. res.write('{"err": 1, "msg": "password can\'t be null!"}')
  44. res.end()
  45. }else if(!/^\w{4,16}$/.test(user)){
  46. res.write('{"err": 1, "msg": "username is invalid!"}')
  47. res.end()
  48. }else if(/['|"]/.test(user)){
  49. res.write('{"err": 1, "msg": "username is invalid!"}')
  50. res.end()
  51. }else if(/['|"]/.test(pass)){
  52. res.write('{"err": 1, "msg": "password is invalid!"}')
  53. res.end()
  54. }else{
  55. db.query(`SELECT * FROM user_table WHERE username='${user}';`, function (err, data) {
  56. if(err) {
  57. res.write('{"err": 1, "msg": "database error!"}')
  58. res.end()
  59. }
  60. else if(data.length>0){
  61. res.write('{"err": 1, "msg": "this username exists!"}')
  62. res.end()
  63. }
  64. else {
  65. db.query(`INSERT INTO user_table (ID, username, password) VALUES(0, '${user}', '${md5_2(pass)}');`, function (err, data) {
  66. if(err) {
  67. res.write('{"err": 1, "msg": "database error!"}')
  68. res.end()
  69. }
  70. else {
  71. res.write('{"err": 0, "msg": "register success!"}')
  72. res.end()
  73. }
  74. })
  75. }
  76. })
  77. }
  78. break
  79. // 登陆:
  80. case '/login':
  81. if(!user){
  82. res.write('{"err": 1, "msg": "username can\'t be null"}');
  83. res.end();
  84. }else if(!pass){
  85. res.write('{"err": 1, "msg": "password can\'t be null"}');
  86. res.end();
  87. }else if(!/^\w{4,16}$/.test(user)){
  88. res.write('{"err": 1, "msg": "username is invaild"}');
  89. res.end();
  90. }else if(/['|"]/.test(pass)){
  91. res.write('{"err": 1, "msg": "password is invaild"}');
  92. res.end();
  93. }else{
  94. db.query(`SELECT * FROM user_table WHERE username='${user}'`, (err, data)=>{
  95. if(err){
  96. res.write('{"err": 1, "msg": "database error"}');
  97. res.end();
  98. }else if(data.length===0){
  99. res.write('{"err": 1, "msg": "no this user"}');
  100. res.end();
  101. }else if(data[0].password!==md5_2(pass)){
  102. res.write('{"err": 1, "msg": "username or password is incorrect"}');
  103. res.end();
  104. }else{
  105. res.write('{"err": 0, "msg": "success"}');
  106. res.end();
  107. }
  108. });
  109. }
  110. break;
  111.  
  112. default:
  113. //获取文件日期
  114. fs.stat(`www${pathname}`, (err, stat)=>{
  115. if(err){
  116. res.writeHeader(404);
  117. res.write('Not Found');
  118. res.end();
  119. }else{
  120. // 缓存
  121. // 请求头中有if-modified-since -> 不是第一次请求,之前浏览器中缓存了该页面
  122. if(req.headers['if-modified-since']){
  123. let oDate=new Date(req.headers['if-modified-since']);
  124. let time_client=Math.floor(oDate.getTime()/1000);
  125. let time_server=Math.floor(stat.mtime.getTime()/1000);
  126.  
  127. if(time_server>time_client){ // 服务器的文件时间 > 客户端手里的版本
  128. sendFileToClient();
  129. }else{
  130. res.writeHeader(304);
  131. res.write('Not Modified');
  132. res.end();
  133. }
  134. }
  135. // 请求头中没有if-modified-since -> 第一次请求 -> 直接返回要的文件
  136. else{
  137. sendFileToClient();
  138. }
  139.  
  140. // 直接返回文件
  141. function sendFileToClient(){
  142. //发送
  143. let rs=fs.createReadStream(`www${pathname}`);
  144. let gz = zlib.createGzip()
  145. res.setHeader('Last-Modified', stat.mtime.toGMTString());
  146. res.setHeader('content-encoding', 'gzip')
  147. //输出
  148. rs.pipe(gz).pipe(res)
  149.  
  150. rs.on('error', function(err){
  151. res.writeHeader(404);
  152. res.write('Not Found');
  153. res.end();
  154. });
  155. }
  156. }
  157. });
  158. }
  159. })
  160.  
  161. server.listen(8080)

node使用MySQL数据库的更多相关文章

  1. node连接mysql数据库

    1. 创建项目,安装mysql 创建项目文件夹test, 在test文件夹下yarn add mysql --save安装mysql: 2. node使用mysql 在test文件夹下,创建test. ...

  2. 你不会用node 操作mysql数据库吗?

    http://static.runoob.com/download/websites.sql这是实例 websites.sql文件1.安装node的mysql服务 npm install mysql ...

  3. Node.JS + Mysql数据库

    服务嘛,当然离不开数据库了,你要是见到数据就哭了,我建议你还是看看本文,不要做数据哭啊,哈哈哈 要做 ‘数据酷’嘛,哈哈哈 一 安装 1. wget -i -c http://dev.mysql.co ...

  4. Node 操作 MySQL 数据库

    1, 下载 mysql 依赖 => npm -i mysql 2, 写一个核心工具类, 用于获取线程池连接 mysql-util.js // 引入 mysql 数据库连接依赖 const mys ...

  5. Node 操作MySql数据库

    1, 需要安装 MySQL 依赖 =>  npm i mysql -D 2, 封装一个工具类 mysql-util.js // 引入 mysql 数据库连接依赖 const mysql = re ...

  6. node 连接 mysql 数据库三种方法------笔记

    一.mysql库 文档:https://github.com/mysqljs/mysql mysql有三种创建连接方式 1.createConnection 使用时需要对连接的创建.断开进行管理 2. ...

  7. node操作mysql数据库

    1.建立数据库连接:createConnection(Object)方法       该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php ...

  8. 记一段使用node对mysql数据库做处理

    所用到的存储过程如下: temp_get_userCount: BEGIN #Routine body goes here... SELECT COUNT(id) as num FROM tbl_us ...

  9. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

随机推荐

  1. FreeOpcUa compile

    /********************************************************************************* * FreeOpcUa compi ...

  2. OpenCV-bwLabel-实现图像连通组件标记与分析

    OpenCV实现图像连通组件标记与分析- matlab bwLabel; code: #include <opencv2/opencv.hpp> #include <iostream ...

  3. Linux系统nat模式联网——VM是12 系统是cantos7

    >点击还原默认设置,然后确定 >选择Vmnet8,VMnet信息自动选中NAT模式 记住子网IP和子网掩码 >点击NAT设置,记住网关IP >点击DHCP.记住IP范围 > ...

  4. (2)socket的基础使用(基于TCP协议)

    socket()模块函数用法 基于TCP协议的套接字程序 netstart -an | findstr 8080 #查看所有TCP和UDP协议的状态,用findstr进行过滤监听8080端口 服务端套 ...

  5. mysql 常用linux命令

    ★ 数据导出命令 D:\Program Files\MySQL\MySQL Server 5.6.39\bin 导出:  mysqldump -u root -p cela_sub > D:/d ...

  6. ppt罗列项排版

    关于罗列项的排版(1,....2,......3,......4,........)

  7. 转oracle 学习- 数据类型

    oracle数据类型 有道是,磨刀不误砍柴工.多了解一些底层的东西,对于Oracle开发.维护大有裨益.个人总结了一些Oracle数据类型集解,相信读者阅读了本文以后,Oracle数据库开发起来会事半 ...

  8. js模板引擎之juicer,特别好用

    中文文档地址 https://www.npmjs.com/package/juicer Juicer基础知识:语法2  http://blog.163.com/lvshutao@126/blog/st ...

  9. Socket-Vs-WebSocket-TestTool

    项目地址 :  https://github.com/kelin-xycs/Socket-Vs-WebSocket-TestTool Socket-Vs-WebSocket-TestTool 一个用 ...

  10. centos 下nginx源码编译安装

    1.下载nginx 进入nginx官网下载nginx的稳定版本,我下载的是1.10.3. 下载:wget http://nginx.org/download/nginx-1.10.3.tar.gz 解 ...