node封装mysql模块
Posted cosyer的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node封装mysql模块相关的知识,希望对你有一定的参考价值。
node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果。但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一次操作封装,让查询更加方便。(node版本需>=7.0)。
简单来说,async/await的实现原理是基于promise,根据promise的状态来判断是否真正返回,因此我们可以在mysql真正查询到结果后将promise状态切换为resolve,返回结果。如出现错误通过reject返回错误信息,reject需要用try/catch进行捕获。
‘use strict‘; const mysql = require(‘mysql‘); var local = true var pool // 创建连接池 if (local) { pool = mysql.createPool({ connectionLimit: 50, host: ‘localhost‘, user: ‘root‘, password: ‘root‘, database: ‘crawl‘, multipleStatements: true //是否允许执行多条sql语句 }); } //将结果已对象数组返回 var row = (sql, ...params) => { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query(sql, params, function (error, res) { connection.release(); if (error) { reject(error); return; } resolve(res); }); }); }); }; //返回一个对象 var first = (sql, ...params) => { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query(sql, params, function (error, res) { connection.release(); if (error) { reject(error); return; } resolve(res[0] || null); }); }); }); }; //返回单个查询结果 var single = (sql, ...params) => { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query(sql, params, function (error, res) { connection.release(); if (error) { reject(error); return; } for (let i in res[0]) { resolve(res[0][i] || null); return; } resolve(null); }); }); }); } //执行代码,返回执行结果 var execute = (sql, ...params) => { return new Promise(function (resolve, reject) { // 获取连接 pool.getConnection(function (err, connection) { if (err) { reject(err); return; } // 操作数据库 connection.query(sql, params, function (error, res) { // 释放 connection.release(); if (error) { reject(error); return; } resolve(res); }); }); }); } //模块导出 module.exports = { ROW: row, FIRST: first, SINGLE: single, EXECUTE: execute } /*连接mysql*/ function connectToMysql() { var connection = mysql.createConnection({ host: ‘‘, user: ‘‘, password: ‘‘, database: ‘‘ }); connection.connect(); //查询 connection.query(‘SELECT * FROM user;‘, function (err, rows, fields) { if (err) throw err; console.log(‘The solution is: ‘, rows[0]); }); //关闭连接 connection.end(); }
以上是关于node封装mysql模块的主要内容,如果未能解决你的问题,请参考以下文章