node中利用mysql2插件与数据库进行交互

  • Post author:
  • Post category:mysql




准备操作

先下载mysql2插件。在控制台中输入

在这里插入图片描述

安装成功的样子

在这里插入图片描述

例:

// 导入模块
const mysql = require('mysql2');
 
// 创建与mysql的连接
  const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password:'123456',
    database: 'test',
    multipleStatements:true
  });
  
 
// 连接方法一
connection.query(
  'SELECT * FROM `table` WHERE `name` = "Page" AND `age` > 45',
  function(err, results, fields) {
    console.log(results); // results contains rows returned by server
    console.log(fields); // fields contains extra meta data about results, if available
  }
);
 
// 连接方法二(通常情况用这个方式)
connection.query(
  'SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',
  ['Page', 45],
  function(err, results) {
    console.log(results);//打印查询结果
  }
);

但以上用的

connection.query

函数会被恶意sql注入,以防止sql注入,我们可以使用execute()代替query()

// get the client
const mysql = require('mysql2/promise');
 
async function select1(id){
  // 新建一个数据库连接
  const connection =await mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password:'123456',
    database: 'test',
    multipleStatements:true
  });
  
  // simple query
  let sql = `select * from day01 where id=?`;
  const [results] = await connection.execute(sql,[id]);
  console.log(results);//打印结果
}
select1(2)

//另一种查询方式
/*let sql =  `select * from information`;
  connection.execute(sql,[id],
    function(err, results) {
      console.log(results); // results contains rows returned by server
    }
  );*/


注意上面自定义函数前面得async和回调函数前面得await两个特殊字符,它们联合起来使用时,可以将异步操作变成同步,如上回调函数

connection.execute(sql,[id])

本来是异步操作,前面加上await、外层自定义函数加上async后便成了同步操作



连接池

通过上述几个案例,我们已经了解基本得与数据库交互得操作,但有个问题,如果我们需要写增删改查或者更多得与数据库交互的代码,难不成在去写n个连接吗,所以我们可以用连接池来优化代码。

// get the client
const mysql = require('mysql2/promise');
 
// Create the connection pool. The pool-specific settings are the defaults
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password:'root',
  database: 'wuchuan',
  waitForConnections: true,//  连接超额时是否等待
  connectionLimit: 10,//连接的最多的个数
  queueLimit: 0//可以等待的连接的个数
});

//查
async function select(){
  let sql = 'select * from day01';
  const [res] = await pool.execute(sql);
  console.log(res);
}
select();

//增
async function add(){
  let sql = 'insert into day01 values("abc","123")';
  const [res] = await pool.execute(sql);
  console.log(res);
}
add();

//改
async function update(){
  let sql = 'update dat01 set name="zyl"';
  const [res] = await pool.execute(sql);
  console.log(res);
}
update();

//删
async function del(){
  let sql = 'delete from day01 name="zyl"';
  const [res] = await pool.execute(sql);
  console.log(res);
}
del();



formidable

作用:专门接受form表单里面的内容,不仅可以接受普通表单,还可以接受文件表单

当我们在页面提交表单数据到node服务器时,可以使用此模块来快速获取传输内容

let http =  require('http');
let formidable = require('formidable');
let url = require('url');
let mysql = require('mysql2/promise');
let md5 = require('md5');
// mysql连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password:'root',
    database: 'wuchuan',
    waitForConnections: true,//  连接超额时是否等待
    connectionLimit: 10,//连接的最多的个数
    queueLimit: 0//可以等待的连接的个数
});


let server = http.createServer((req,res)=>{
    res.setHeader('Access-Control-Allow-Origin','*');
    //用于避免重复打印数据
    if(url.parse(req.url).path=='/favicon.ico'){
        return ;
    }
    console.log("有请求来啦!!!");
    let from = formidable();
    // 有三个参数  第一个参数 err
    //               fielads   
    //               files
    if(req!=null){
        from.parse(req,(err,fielads)=>{
            console.log(fielads);
            add(fielads)
       })
    }
   res.write('新增成功')
   res.end();
    
})
server.listen(9527,()=>{
    console.log("已经监听到9527端口");
})


// 增加方法
async function add(fielads){
    let {user,pass,age,sex} = fielads;
    let password = md5(pass);
    let sql = 'INSERT INTO student (name,password,age,sex) VALUES(?,?,?,?)';
    const [res] = await pool.execute(sql,[user,password,age,sex]);
    console.log(res);
}



拓展md5加密

let md5 = require('md5');
let test = md5("123");
console.log(test);

打印

在这里插入图片描述



版权声明:本文为weixin_44649210原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。