node-mysql2操作数据库

2020-08-07  本文已影响0人  雨落倾城夏微凉_e861

上一篇说到用node-ORM框架来操作数据库,可以减少我们去写sql语句。今天用node-mysql2来对数据库进行操作。这个可能要求我们会一些基础的增删改查的sql语句。有兴趣的可以去看看mysql的一些简单语句。

安装mysql2

npm i mysql2 -S 或
cnpm i mysql2 -S 或
yarn add mysql2

因为demo中还是要用到node跨域,所以我直接在之前讲node跨域的代码上做修改。
node-mysql2连接数据库提供了两种连接方式:GitHub:https://github.com/sidorares/node-mysql2
第一种通过createConnection来创建连接,今天我们主要说第二种通过创建连接池的方式。
主要是因为使用连接池特别灵活,大大提高了我们的效率。
连接池通过重用以前的连接,使它们处于打开状态而不是关闭状态,从而减少了连接到MySQL服务器的时间。
由于避免了建立新连接带来的所有开销,因此可以提高查询的延迟。
简单的说一下第一种方法的步骤,大家可自行尝试:

//1.引入mysql2
const mysql = require("mysql");
//2创建到数据库服务器连接
var conn = mysql.createConnection({
  host:"127.0.0.1",
  user:"root",
  password:"密码",
  database:"数据库名称",
  port:3306
});
//3创建SQL语句并且发送SQL语句
var sql = "";//操作数据库的增删改查语句
conn.query(sql,[],//如果查询数据库有变量的话放到数组中,没有变量可省略这个参数
   (err,result)=>{
 if(err){
   console.log(err);
 }else{
   console.log(result);
 }
})
//4关闭连接
conn.end();

第一种方法基本就遵循上面四步,下面说一下第二种方法,同样用demo举例
这次用的Mac系统,装了mysql数据库,并且已经提前创建了数据库和表数据,用两个demo来说明对数据库的操作,查询数据和添加数据,接下来看代码。
目录结构:


1.png

server.js

const express = require("express");
const bodyParser = require("body-parser");
const mysql2 = require("mysql2")
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}))
const allowCrossDomain = function(req, res, next){
    res.header('Access-Control-Allow-Origin', '*');//自定义中间件,设置跨域需要的响应头。
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');//允许任何方法
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,X-Session-Token'); //允许任何类型
    next()
}
app.use(allowCrossDomain);
const pool = mysql2.createPool({//创建连接池
    host: 'localhost',
    user: 'root',
    password: "数据库密码",
    database: 'jindu_loan',//数据库名称
    connectionLimit: 10//连接池大小
})
app.get("/",(req, res)=>{
     pool.getConnection((err, conn)=> {
        const sql = "select * from jd_user";//查询jd_user表中的用户
        conn.query(sql, async(err, result)=>{
            if (err) throw err;
            await res.json(result);
            conn.release();//数据查询成功后归还连接
        })
    })
})
app.listen(3000,() => console.log("server on http://localhost:3000"))

启动项目打开http://localhost:3000/

1.png
查询到了用户数据,图片中展示了部分用户。
查询没问题了,接下来我们要往jd_user表中添加一个用户接着修改server.js,
先查询一下js_user表中有多少个字段
2.png
查询数据库发现共有9个字段。
const express = require("express");
const bodyParser = require("body-parser");
const mysql2 = require("mysql2")
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}))
const allowCrossDomain = function(req, res, next){
    res.header('Access-Control-Allow-Origin', '*');//自定义中间件,设置跨域需要的响应头。
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');//允许任何方法
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,X-Session-Token'); //允许任何类型
    next()
}
app.use(allowCrossDomain);
const pool = mysql2.createPool({
    host: 'localhost',
    user: 'root',
    password: "123456",
    database: 'jindu_loan',
    connectionLimit: 10
})
app.get("/",(req, res)=>{
     pool.getConnection((err, conn)=> {
        if (err) throw err;
        const sql = "select * from jd_user";
        conn.query(sql, async(err, result)=>{
            if (err) throw err;
            await res.json(result);
            conn.release();
        })
    })
})
app.post("/reg",(req, res)=>{
    const {account, pwd, real_name} = req.body;//获取用户提交的数据
    if(account && pwd && real_name){
        pool.getConnection((err, conn)=>{
            if(err) throw err;
            const sql = "insert into jd_user values(null,?,?,?,now(),null,null,now(),null)";//写追加数据的sql变量可用"?"占位,追加的字段数量要与刚才查询的字段数量一致,否则会报错
            conn.query(sql,[account, pwd, real_name],async(error,result)=>{//数组中放我们传入的变量会自动替换"?"
                if(error) throw error;
                await res.json({code: 200, msg: "添加成功"})
                conn.release();
            })
        })
    }
})
app.listen(3000,() => console.log("server on http://localhost:3000"))

再去index.html中写个post提交的方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    用户名:<input class="userName" type="text">
    <p>密码:<input class="userPwd" type="text"></p>
    <p>真实姓名:<input class="real_name" type="text"></p>
    <button>提交</button>
    <script src="js/jquery.min.js"></script>
    <script>
        $("button").click(function(){
            const body = {};
            body.account = $(".userName").val();
            body.pwd = $(".userPwd").val();
            body.real_name = $(".real_name").val();
            $.ajax({
                url: "http://localhost:3000/reg",
                type: "post",
                dataType: "json",
                data: body,
                success: function(data){}
            })
        })
    </script>
</body>
</html>

npm run start启动项目,打开index.html输入提交的值


3.png

点击提交后,打开http://localhost:3000/

4.png
我们刚才的数据提交成功了。
上一篇下一篇

猜你喜欢

热点阅读