node是基于异步的,所以在进行数据库查询操做的一般是经过回调来操做查询结果。可是在有了es7的async/await,基本再也不须要回调了,因此本篇是基于async/await对mysql进行一次操做封装,让查询更加方便。(node版本需>=7.0)。 node
简单来讲,async/await的实现原理是基于promise,根据promise的状态来判断是否真正返回,所以咱们能够在mysql真正查询到结果后将promise状态切换为resolve,返回结果。如出现错误经过reject返回错误信息,reject须要用try/catch进行捕获。mysql
'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(); }