node怎么封装mysql处理语句

1. 简介

在node.js中,被广泛使用的mysql数据库,为方便使用,实现了多个别名方法,用来减少sql语句的书写以及符合node.js异步回调的编程风格,但是使用这些别名方法时,难免会出现语句的错误或者需要自定义sql语句的情况,那么如何在node.js中封装mysql,简化语句书写, 防止sql注入,提高代码可读性和可维护性呢?那么这篇文章就是写来解决这个问题的。

2. 安装依赖

在开始写代码前,我们先要明确需要安装哪些npm包。

2.1 mysql

mysql是连接mysql数据库的node.js驱动,是node.js中最受欢迎的mysql数据库驱动程序。

npm install mysql --save

3.封装mysql处理语句

我们来封装一个mysql处理语句的类,这样可以创建不同的对象,每一个对象都对应一个连接。

3.1 创建db类

我们创建一个db.js文件,用于封装mysql处理语句的代码:

const mysql = require('mysql');

const config = require('../config/config');

class DB {

constructor() {

// 1. 创建连接

this.connection = mysql.createConnection({

host: config.host,

user: config.user,

password: config.password,

database: config.database

});

// 2. 连接

this.connection.connect(function(error) {

if (error) {

console.log('mysql连接失败:' + error.stack);

return;

}

console.log('mysql连接成功,id:' + connection.threadId);

});

}

query(sql, values, callback) {

// 防止sql注入

this.connection.query(sql, values, function(error, results, fields) {

// 请求异常

if (error) {

console.log('error:' + error.stack);

callback(error.stack);

return;

}

// 请求正常

callback(null, results);

});

}

// 关闭连接

end() {

this.connection.end();

}

}

module.exports = DB;

3.2 使用db类

接下来我们来演示一下db类的使用方法。

3.2.1 增加一条数据

假设我们要往user表中增加一条数据:

const DB = require('./db');

const db = new DB();

const user = {

name: 'Lena',

age: 20,

gender: 'female'

};

let sql = `INSERT INTO user (name,age,gender) VALUES(?,?,?)`;

let values = [user.name, user.age, user.gender];

db.query(sql, values, function(error, results) {

if (error) {

console.log(error.stack);

return;

}

console.log(`成功插入 ${results.affectedRows} 条数据`);

});

db.end();

3.2.2 删除一条数据

假设我们要从user表中删除一条数据:

const DB = require('./db');

const db = new DB();

let sql = `DELETE FROM user WHERE id = ?`;

let values = [1]; // 如果不知道id,可以通过查询语句获取

db.query(sql, values, function(error, results) {

if (error) {

console.log(error.stack);

return;

}

console.log(`成功删除 ${results.affectedRows} 条数据`);

});

db.end();

3.2.3 修改一条数据

假设我们要修改user表中一条数据:

const DB = require('./db');

const db = new DB();

const user = {

name: 'Cathy',

age: 18,

gender: 'female'

};

let sql = `UPDATE user SET name=?,age=?,gender=? WHERE id = ?`;

let values = [user.name, user.age, user.gender, 1]; // 如果不知道id,可以通过查询语句获取

db.query(sql, values, function(error, results) {

if (error) {

console.log(error.stack);

return;

}

console.log(`成功修改 ${results.affectedRows} 条数据`);

});

db.end();

3.2.4 获取数据列表

假设我们要从user表中获取数据列表:

const DB = require('./db');

const db = new DB();

let sql = `SELECT * FROM user WHERE id > ?`;

let values = [0]; // 从id>0开始

db.query(sql, values, function(error, results) {

if (error) {

console.log(error.stack);

return;

}

console.log(`总共查询到 ${results.length } 条数据`);

});

db.end();

4. 总结

通过上面的代码封装,我们可以很方便地对mysql进行操作,而且也很容易扩展。但是要注意在使用Mysql的操作时,为了提高代码的安全性,需要防止sql注入,如果不了解防注入的知识,可以先去学习一下。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。