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 ...
随机推荐
- [LOJ#2270][BZOJ4912][SDOI2017]天才黑客
[LOJ#2270][BZOJ4912][SDOI2017]天才黑客 试题描述 SD0062 号选手小 Q 同学为了偷到 SDOI7012 的试题,利用高超的黑客技术潜入了 SDOI 出题组的内联网的 ...
- python 写excal
workbook.save(filename)
- Gty的妹子树(bzoj 3720)
Description 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕…… Gty神(xian)犇(chong)从来不缺妹子…… 他来到了一棵妹子树下,发现每 ...
- docker使用 命令
Dockerfile FROM golang:alpine3. AS build-stage WORKDIR /go/src/mypro.exportReport COPY . . RUN go bu ...
- Objective C语言中nil、Nil、NULL、NSNull的区别
以下内容是基于搜集整理的网上资料,供参考. nil:指向Objective C语言中对象的空指针,其定义值为(id)0. Nil:指向Objective C语言中类(Class)的空指针,其定义值为( ...
- BZOJ 3675 [Apio2014]序列分割 (斜率优化DP)
题目链接 BZOJ 3675 首先最后的答案和分割的顺序是无关的, 那么就可以考虑DP了. 设$f[i][j]$为做了$i$次分割,考虑前$j$个数之后的最优答案. 那么$f[i][j] = max( ...
- ansible、zabbix、tcpdump
Ansible 源码安装 https://blog.csdn.net/williamfan21c/article/details/53439307 Ansible安装过程中常遇到的错误 http:// ...
- linux系统之shell编程-正則表達式
shell编程正則表達式: 1:元字符 [ ] . * ? + ( ) | { } ^ $ 2 : [a-z0-9] 表示匹配随意数字和字母的一个 3 : [^a-z] ...
- VS2012,VS2010无法生成dll程序集的解决办法
在我们做项目的时候总会遇到dll程序集无法生成导致各种问题. 通常我们的做法就是清理项目,然后重新生成,或者直接到bin目录下删除所有dll,然后重新生成. 有时候某几个dll就是不生成. 这时候就需 ...
- 在linux中安装.sh 文件
有一些linux的安装包是.sh后缀的安装包,可以通过$bash xxx.sh的命令来进行安装.