本文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改造的更多相关文章

  1. 如何让 node 运行 es6 模块文件,及其原理

    如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机 ...

  2. Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

    注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...

  3. 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)

    请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...

  4. node+mysql,实现基本的增删改查,附带跟踪记录和运行时间记录

    Node + mysql 实现基础的增删改查,以及性能测试. 网上有很多这样的例子,我也是找来学习的. 感觉node对mysql的操作非常简单,也很实用,比如自带防止sql注入的功能,一开始还担心注入 ...

  5. node+mysql 数据库连接池

    1. 什么是数据库连接池? 数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个池,由程序动态地对池中的连接进行申请,使用和释放. 2. 使用数据库连接池原理及优点是什么? 数据库连接池 ...

  6. 前端必备之Node+mysql+ejs模版如何写接口

    前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...

  7. linux centos7 安装常用软件java,node,mysql,Seafile

    linux centos7 安装常用软件java,node,mysql,Seafile 安装压缩解压缩软件 yum install -y unzip zip 安装git yum install -y ...

  8. node与mysql的相互使用————node+mysql

    node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我 ...

  9. webpack 兼容低版本浏览器,转换ES6 ES7语法

    ES6,ES7真的太棒了,async +await+Promise,让我阅读代码的时候不用再从左拉到右了(异步太多,一层套一层真的太头痛) 但是有个问题,打包后低版本浏览器运行不了,还有我用了一些混淆 ...

随机推荐

  1. POJ - 3538 - Domestic Networks

    先上题目: Domestic Networks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 732   Accepted: ...

  2. UVa - 12661 - Funny Car Racing

    先上题目: 12661 Funny Car RacingThere is a funny car racing in a city with n junctions and m directed ro ...

  3. CentOS6.5下卸载MySql(yum安装)

    因为我是用yum安装的mysql,所以卸载相对简单 yum -y remove mysql* 再把相关的文件删掉, rm -f /etc/my.cnf.rpmsave  rm -rf /var/lib ...

  4. java GC垃圾回收机制G1、CMS

    CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间.对于要求服务器响应速度的应用上,这种垃圾回收器非常适合.在启动JVM参数加上-XX:+UseConcMa ...

  5. PDF在线预览-pdfjs使用

    请参考我的开源: https://github.com/wuyechun2018/itools/blob/master/src/main/webapp/WEB-INF/views/pdf/index. ...

  6. 2.6-NAT

    2.6-NAT     网络地址转换协议NAT(Network Address Translation):     交换和远程都要用,先上什么就放在哪一块讲,具体来说NAT还是属于远程的.       ...

  7. double型转换成string型

    double型转换成string型 题目描写叙述: 如有一个函数.其可接受一个long double參数,并将參数转换为字符串.结果字符串应保留两位小数,比如,浮点值123.45678应该生成&quo ...

  8. 本地项目上传虚拟机的gitlab

    前提:在虚拟机安装了gitlab服务,并且本机可以访问到虚拟机的gitlab 自己本机项目上传到gitlab 1.先在gitlab上建立项目 拷贝项目地址: http://192.168.1.105/ ...

  9. crm使用FetchXml分组聚合查询

    /* 创建者:菜刀居士的博客  * 创建日期:2014年07月09号  */ namespace Net.CRM.FetchXml {     using System;     using Micr ...

  10. hdfs du命令是算的一份数据

    As you can see, hadoop fsck and hadoop fs -dus report the effective HDFS storage space used, i.e. th ...