在node中使用mysql数据库

数据库的增删改查

步骤:

  1. 安装mysql数据库模块 npm i mysql

  2. 引入模块

  3. 创建连接配置

  4. 建立连接

  5. 执行sql语句并返回结果

  6. 关闭数据库连接

// 1. 引入mysql模块
let mysql = require('mysql');

// 2. 创建连接配置
const conn = mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'',
    database:'qtummatrix'
})

// 3. 建立连接
conn.connect();

// 4. 准备sql语句
// let sql = 'select * from student'; 查询语句
// let sql = 'insert into student values(null,"冉祎航",20,1,"计算机",2)'
// let sql = 'update student set age = 30 where id = 31'
// let sql = 'delete from student where id = 31'

// 5. 执行sql语句
conn.query(sql,(err,res)=>{
    if(err){
        return err;
    }
    console.log(res);
})

// 6. 结束连接;如果不再有sql被执行,一定要关闭连接,否则会一直占用资源
conn.end();

/*
对于增删改查而言,只有查询的语句,返回值是一个数据,包含所有查询结果,每一条记录是一条数据;
其他的返回的都是对象,affectRows表示受影响的行数,一般情况下通过该字段判断增删改的结果
*/

注意:

实现mysql数据库的注册功能

register.html页面

<h1>注册页面</h1>
    <form action="http://127.0.0.1:3000/register" method="post">
        用户名:<input type="text" name="uname"><br/>
        密码:<input type="password" name="pwd" id="pwd"><br/>
        确认密码:<input type="password" name="repwd" id="repwd"><br/>
        <input type="submit" id='btn'>
        <input type="reset">
    </form>
</body>
<script>
    let btn = document.querySelector('#btn');
    let pwd = document.querySelector('#pwd');
    let repwd = document.querySelector('#repwd');
    btn.onclick = function(){
        if(pwd.value != repwd.value){
            console.log('两次密码不一致!');
            return false;
        }
    }
</script>

index.js 处理请求和数据页面

// 引入模块
let http = require('http');
let fs = require('fs');
let mysql = require('mysql');
const url = require("url");

// 创建http服务器环境
var serve = http.createServer(function(req,res){
    res.setHeader('Content-Type','text/html;charset=utf-8')
    // 判断地址为favicon
    if(req.url == '/favicon.ico'){
        res.end('');
        return
    }else if(req.url == '/index'){ // 注册界面
        fs.readFile('./register.html','utf-8',(err,data)=>{
            if(err){
                res.end('文件读取失败,请稍后重试!');
                return;
            }
            res.end(data);
        });
    }else if(req.url == '/register'){ // 点击注册按钮
        console.log('demo');
        // 获取传递过来的参数
        let body = '';
        req.on('data',chunk=>{
            body += chunk;
        })
        req.on('end',()=>{
            let parms = new URLSearchParams(body);
            console.log(parms);
            // 1. 配置数据库信息
            let conn = mysql.createConnection({
                host:'localhost',
                database:'qtummatrix',
                user:'root',
                password:''
            })
            // 2. 连接
            conn.connect();
            // 3. 准备sql语句
            let sql =  `insert into user(name,pwd) values(${parms.get('uname')},${parms.get('pwd')})`;
            // console.log(sql);
            // 4. 执行sql语句
            conn.query(sql,(err,data)=>{
                if(err){
                    res.end('服务器内部错误!');
                    return;
                }
                if(data.affectedRows > 0){
                    res.end('注册成功了');
                }
            })
        })
    }   
});

// 监听端口
serve.listen(3000,res=>{
    console.log('端口号3000');
})

注意:数据库连接:频繁的创建和销毁连接是非常消耗资源的

连接池的使用

连接池:程序启动时,程序会建立一定数量的连接对象,并将这些连接对象放在一个尺子里。由程序动态的对池子中的连接进行分配,使用和释放。

// 1. 引入mysql模块
let mysql = require('mysql');

// 2. 创建连接池
let pool = mysql.createPool({
    host:'localhost',
    database:'qtummatrix',
    user:'root',
    password:'',
    connectionLimit:50, // 连接池中最大的连接数 (默认10)
    queueLimit:3 // 用于指定允许挂起的最大连接数,超过了会报错
})
// 3. 建立连接
pool.getConnection((err,conn)=>{
    // 如果连接失败了,err就是错误信息对象
    if(err){
        console.log('与mysql数据库建立连接失败');
        return
    }
    console.log('与mysql建立连接成功');
    // conn 连接池子冻给你分配的连接对象
    conn.query('select * from major',(err,data)=>{
        if(err){
            console.log('查询失败:'+err);
            return;
        }
        // 对查询的结果进行操作
        console.log(data);
        // 释放连接,归还连接
        conn.release();
    })
})
封装mysql方法

封装连接池的数据库连接方式

// 1. 引入mysql模块
let mysql = require('mysql');
let db = {};

// 2. 创建连接池
let pool = mysql.createPool({
    host:'localhost',
    database:'qtummatrix',
    user:'root',
    password:'',
    connectionLimit:50, // 连接池中最大的连接数 (默认10)
    queueLimit:3 // 用于指定允许挂起的最大连接数,超过了会报错
})

// 3. 导出连接
// 添加一个query方法
db.query = function(sql,callback){
    pool.getConnection((err,conn)=>{
        if(err){
            console.log(err);
            return
        }
        conn.query(sql,(err,data)=>{
            if(err){
                console.log(err);
                return
            }
            callback(data);
        })
    })
}
// 4. 导出模块
module.exports = db;

调用封装好的连接池

let db = require('./db');

// 使用封装的内容
db.query("select * from student",data=>{
    console.log(data);
})

咱们封装好的数据库方法,基本上是万能的方法,可以实现数据库的常用操作

封装新增代码

针对数据库中的增删改查的返回值是不一样的;

增删改返回的是一个受影响的行数;

查询返回的是所有查询到的数据

  1. 封装插入操作

    insert into student values(null,‘jack’,19,‘web前段’)

    需要知道的字段:表名,插入的数据

    let db = require('./2.db');
    let info = {
      id:null,
      name:'jack',
      age:18,
      sex:'男'
    }
    db.insert('student',info,()=>{
    	console.log('新增成功!');
    });
    
  2. 封装插入操作

    // 封装插入一条数据
    // insert into major values(null,'上海大学')
    let insert = (table,datas,callBack)=>{
      // 拼接SQL
      let fields = '';// 拼接字段
      let values = ''; // 拼接值
      for(const k in datas){
        fields += k+',',
        values += `'${datas[k]}',`;
      }
      // console.log(fields);
      // console.log(values);
    
      // 清除最后一位的逗号
      fields = fields.slice(0,-1);
      values = values.slice(0,-1);
    
      let sql = `insert into ${table} (${fields}) values(${values})`;
    
      // console.log(sql);
      // 将sql语句放在query中执行
      query(sql,callBack);
    }
    
    // 将conn下的query方法以函数的形式暴漏出去
    module.exports = {
      query,
      insert
    };
    
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜空孤狼啸

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值