node mysql es6/es7改造
本文js代码采取了ES6/ES7的写法,而不是commonJs的写法。支持一波JS的新语法。
node版本的mysql驱动,通过npm i mysql安装。官网地址:
https://github.com/mysqljs/mysql
我们使用了连接池(为什么要使用连接池?性能啊),官网上说明有2种连接池的使用方式:
pool.query()
pool.getConnection();
区别是什么,网上的说法:大部分时间用 pool.query 就行了,当有些操作需要保证是同一 connection 的时候,就独立使用 pool.getConnection。
我们选择pool.getConnection()的方式。代码的组织方式:

说明:
config下的index.js是mysql的配置文件:数据库地址,账户,密码等:
// MySQL数据库联接配置
export default {
mysql: {
host: '127.0.0.1',
user: 'root',
password: 'root',
database:'test', // 前面建的user表位于这个数据库中
port: 8889
}
};
dao下有个base文件夹,这里是我们的封装mysql链接,执行sql的地方。base/pool.js是创建一个连接池,写法固定:
import mysql from 'mysql';
import $conf from '../../config/db.js';
let pool = mysql.createPool($conf.mysql); export default pool;
1.回调的方式:
base/index.js使我们对执行sql的一个封装。如果用回调的方式:
import pool from './pool';
export default function(query,params,callback){
pool.getConnection(function(err,connection){
if (err) {
connection.release();
throw err;
}
connection.query(query,params,function(err,rows){
connection.release();
if(!err) {
callback(null, {rows: rows});
}
});
connection.on('error', function(err) {
throw err;
});
});
}
回调写法使用很简单,就不举例了
2.Promise then的方式:
我们对base/index.js改造,ES6 Promise then的方式:
import pool from './pool';
function executeQuery(query,params){
return new Promise(function (resolve,reject){
pool.getConnection(function(err,connection){
if (err) {
connection.release();
reject(err);
}
connection.query(query,params,function(err,rows,fields){
connection.release();
if(err) {
reject(err);
}else{
resolve(rows);
}
});
// connection.on('error', function(err) {
// reject(err);
// });
});
});
}
export default executeQuery;
我们采用Promise的写法。我们使用base文件夹里的封装,写一个具体的sql查询,结果处理。 user/index.js用then的方式:
import mohair from 'mohair';
import executeQuery from '../base/index'; let userDao = {
getAll: function (req, res, next) {
let param = req.query || req.params;
let userQuery =mohair.table('user').select('*'); executeQuery(userQuery.sql(),userQuery.params()).then((rows)=>{
res.json({
code:'200',
data:rows
})
}).catch((err)=>{
console.log(err);
res.json({
code:'500',
data:'出错了'
})
});
};
export default userDao;
3.Async/Await:
采用es7的Async/Await,base/index.js不变,还是返回一个Promise。
import mohair from 'mohair';
import executeQuery from '../base/index'; let userDao = {
getAll:async function(req,res,next){
let param = req.query || req.params;
let userQuery =mohair.table('user').select('*'); try{
let result = await executeQuery(userQuery.sql(),userQuery.params())
res.json({
code:'200',
data:result
})
}catch(err){
res.json({
code:'500',
data:err
})
} },
};
export default userDao;
至此我们已经完成了整个封装,base/index.js里返回一个Promise,在我们调用的时候用Async/Await方式
看效果:
node mysql es6/es7改造的更多相关文章
- 如何让 node 运行 es6 模块文件,及其原理
如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机 ...
- Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示
注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...
- 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)
请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...
- node+mysql,实现基本的增删改查,附带跟踪记录和运行时间记录
Node + mysql 实现基础的增删改查,以及性能测试. 网上有很多这样的例子,我也是找来学习的. 感觉node对mysql的操作非常简单,也很实用,比如自带防止sql注入的功能,一开始还担心注入 ...
- node+mysql 数据库连接池
1. 什么是数据库连接池? 数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个池,由程序动态地对池中的连接进行申请,使用和释放. 2. 使用数据库连接池原理及优点是什么? 数据库连接池 ...
- 前端必备之Node+mysql+ejs模版如何写接口
前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...
- linux centos7 安装常用软件java,node,mysql,Seafile
linux centos7 安装常用软件java,node,mysql,Seafile 安装压缩解压缩软件 yum install -y unzip zip 安装git yum install -y ...
- node与mysql的相互使用————node+mysql
node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我 ...
- webpack 兼容低版本浏览器,转换ES6 ES7语法
ES6,ES7真的太棒了,async +await+Promise,让我阅读代码的时候不用再从左拉到右了(异步太多,一层套一层真的太头痛) 但是有个问题,打包后低版本浏览器运行不了,还有我用了一些混淆 ...
随机推荐
- hdu 4971 多校10最大权闭合图
/* 很明显的最大权闭合图题 */ #include<stdio.h> #include<string.h> #include<queue> using names ...
- Element 'dependencies' cannot have character[children],because the type's content type is elemen
问题描述: Element 'xxxxxxx' cannot have character [children],because the type's content type is element- ...
- OceanBase架构浅析(一)
简介 OceanBase是阿里集团研发的可扩展的关系数据库,实现了数千亿条记录.数百TB数据上的跨行跨表事务,截止到2012年8月,支持了收藏夹.直通车报表.天猫评价等OLTP和OLAP在线业务,线上 ...
- ExecutorCompletionService原理具体解释
在JDK并发包中有这么一个类ExecutorCompletionService,提交任务后,能够按任务返回结果的先后顺序来获取各任务运行后的结果. 该类实现了接口CompletionService: ...
- C++ 移位运算与进制转换 浅析
移位运算包括"逻辑移位"(logical shift)和"算术移位"(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bi ...
- NoSQL数据库:Redis内存使用优化与存储
Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: ●String ●Hash ●List ●Set ●Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Re ...
- IOS7中动态计算UILable的高度
.h文件 #import <UIKit/UIKit.h> @interface UILabel (ContentSize) - (CGSize)contentSize; @end .m文件 ...
- [python 基础]python装饰器(一)添加functools获取原函数信息以及functools.partial分析
python装饰器学习的时候有两点需要注意一下 1,被装饰器装饰的函数取其func.__name__和func.func_doc的时候得到的不是被修饰函数的相关信息而是装饰器wrapper函数的doc ...
- python3用list实现栈
工作中遇到的需求,****代表标签数据别的信息: D01 ******** 1 ******** D01 ******** 2 ******** D01 ******** 3 ******** D01 ...
- Colored Sticks(trie)
http://poj.org/problem?id=2513 题意:给一些木棒,木棒两端图上颜色,将端点颜色相同的木棒连在一起,问是否能连成一条直线. 思路:将两端的颜色看成点,将木棒看成边,判断是否 ...
