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模块的更多相关文章
- 使用node中mysql模块连接本地数据库
连接数据库的方法迄今为止学了三种: cmd方式.可视化工具,今天记第三种----node端连接数据库. 一:mysql模块介绍与下载 1.mysql模块是node端专门连接数据库的第三方模块 2.下载 ...
- node封装mysql操作
前言 node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果.但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一 ...
- Node中使用mysql模块遇到的问题
Node的mysql模块,本人的感受就是不好用,各种报错,各种坑,有一个问题困扰了我很久,也不知道是不是我使用的方式不对,不过后来用easymysql模块解决了,我才深信这是一个坑. 问题描述: 假设 ...
- 在Node.js使用mysql模块时遇到的坑
之前写了个小程序Node News,用到了MySQL数据库,在本地测试均没神马问题.放上服务器运行一段时间后,偶然发现打开页面的时候页面一直处于等待状态,直到Nginx返回超时错误.于是上服务器检查了 ...
- node.js使用mysql模块的坑
之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用. ...
- nodejs mysql模块简单封装
nodejs 简单的封装一些mysql模块 实现一个方法根据不同传参进行增删改查 首先要 npm install mysql 代码如下 function data(objHost,sql,callba ...
- node mysql模块写入中文字符时的乱码问题
刚刚发现一个奇怪的问题: 在node上用mysql模块将数据写入数据库的时候,在cmd上打开mysql发现select出来的中文是乱码.但这就奇怪了. 因为本机在安装mysql的时候就已经在配置文件将 ...
- NodeJs使用Mysql模块实现事务处理
依赖模块: 1. mysql:https://github.com/felixge/node-mysql npm install mysql --save 2. async:https://githu ...
- 记一段使用node对mysql数据库做处理
所用到的存储过程如下: temp_get_userCount: BEGIN #Routine body goes here... SELECT COUNT(id) as num FROM tbl_us ...
随机推荐
- iOS学习笔记03-UITableView
一.UITableView基本介绍 默认的UITableView有2种风格: UITableViewStylePlain(不分组) UITableViewStyleGrouped(分组) UITabl ...
- poj 3525 求凸包的最大内切圆
Most Distant Point from the Sea Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3640 ...
- ajax 分页(jquery分页插件pagination) 小例1
<link rel="stylesheet" href="/plugins/jQuery/page/pagination.css"/> <sc ...
- hdu1251 字典树trie 模板题
//字典树模板题.题意:给一个库,每次查询,求以之为前缀的单词数量. #include<iostream> #include<string> #include<vecto ...
- Netty构建游戏服务器(三)--netty spring简单整合
一,基本方法 上节实现了netty的基本连接,这节加入spring来管理netty,由spring来开启netty服务. 在netty服务器中,我们建立了三个类:HelloServer(程序主入口) ...
- BZOJ——2096: [Poi2010]Pilots
http://www.lydsy.com/JudgeOnline/problem.php?id=2096 Time Limit: 30 Sec Memory Limit: 162 MBSubmit: ...
- Nginx+Uwsgi+Django以及解决的一些问题
1.pip3 install uwsgi,项目目录路径:/data/my_env1/monitor1/,项目名:monitor1,app名:show 测试启动: ln -s /data/linkdoo ...
- 聊聊Code Review
转载:https://richardcao.me/2016/09/30/Talk-About-Codereview/ 最近思考一个问题,如何进行高效的codereview,有没有好的工具可以使用,于是 ...
- k-svd字典学习,稀疏编码
1. K-SVD usage: Design/Learn a dictionary adaptively to betterfit the model and achieve sparse s ...
- [转]通俗易懂的php多线程解决方案
原文: https://www.w3cschool.cn/php/php-thread.html --------------------------------------------------- ...