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 ...
随机推荐
- 常州模拟赛d3t2 灰狼呼唤着同胞
题目背景 我的母亲柯蒂丽亚,是一个舞者.身披罗纱,一身异国装扮的她,来自灰狼的村子. 曾经在灰狼村子担任女侍的她,被认定在某晚犯下可怕的罪行之后,被赶出了村子. 一切的元凶,都要回到母亲犯下重罪的那一 ...
- hdu 3711
#include<stdio.h> #include<math.h> #include<stdlib.h> int cmp(const void *a,const ...
- Tree 树(树形期望dp)
题意也是需要解释一下的,这个期望步数,是需要求无限步的时候的,就是你只要能到达,都要算上去, 这个我一开始真的没什么思路,打了暴力,搞一个精度,结果全超时了,看来精度定的太细了. 出题人的题解是这个, ...
- 【Java工具】在代码头部加版权
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- NOJ1203 最多约数问题 [搜索 数论]
传送门 njczy2010 1203 Accepted 79MS 1400K 2321Byte G++ 2015-01-25 13:14:25.0 最多约数问题 时间限制(普通/Java) : 2 ...
- POJ 2096 (dp求期望)
A - Collecting Bugs Time Limit:10000MS Memory Limit:64000KB 64bit IO Format:%I64d & %I64 ...
- call 和 apply 方法区别
在js中call和apply它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别,下面我来给大家介绍一下call和apply用法. 在web前端开发过程中,我们经常需要改变th ...
- js中window.location.search的用法和作用
用该属性获取页面 URL 地址: window.location 对象所包含的属性 属性 描述 hash 从井号 (#) 开始的 URL(锚) host 主机名和当前 URL 的端口号 hostnam ...
- 洛谷——P1057 传球游戏
P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹 ...
- Centos7 下安装 RabbitMQ
安装 erlang 1.下载erlang 官网地址 http://www.erlang.org/download 挑选合适的版本 然后 wget 比如目前最新版本 19.3 运行命令 wget htt ...