准备操作
先下载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 版权协议,转载请附上原文出处链接和本声明。