美文网首页
node-mysql2操作数据库

node-mysql2操作数据库

作者: 雨落倾城夏微凉_e861 | 来源:发表于2020-08-07 10:33 被阅读0次

    上一篇说到用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
    我们刚才的数据提交成功了。

    相关文章

      网友评论

          本文标题:node-mysql2操作数据库

          本文链接:https://www.haomeiwen.com/subject/qisbrktx.html