关于nodejs访问mysql的思考

nodejs要访问mysql数据库,首先必须要安装包mysql,命令:npm install mysql。安装成功后的访问数据库代码如下:

var mysql = require(‘mysql‘);
var options = {
    host: ‘172.23.88.107‘,
    port: 3306,
    database: ‘test‘,
    user: ‘root‘,
    password: ‘zdsoft‘
};

var pool = mysql.createPool(options);

pool.getConnection(function (err, conn) {
    if (err) {
        console.log(err);//打印错误消息
    } else {
        conn.query("select * from student", null, function (err, results, fields) {
            //释放连接
            conn.release();

            if (err) {
                console.log(err);
            } else {
                console.log(results);//成功,打印结果集
            }
        })
    }
});

ok,上面的代码经过测试是没有任何问题的,但是现在就有个问题了,我们每次访问数据库都写这么大一篇感觉太累了,于是我们想把公共的部分提取出来创建一个类,文件名为:sqlHelper.js。由于数据库访问是异步访问的,因此我们不能直接通过返回return的方式,因此就必须要使用回调函数,sqlHelper.js的代码如下:

var mysql = require(‘mysql‘);
var options = {
    host: ‘172.23.88.107‘,
    port: 3306,
    database: ‘test‘,
    user: ‘root‘,
    password: ‘zdsoft‘
};

var pool = mysql.createPool(options);

exports.query = function (sql, vals, fn) {
    pool.getConnection(function (err, conn) {
        if (err) {
            fn(new Error(err));
        } else {
            conn.query(sql, null, function (err, results, fields) {
                //释放连接
                conn.release();

                if (err) {
                    fn(new Error(err));
                } else {
                    fn(null, results, fields);
                }
            })
        }
    });
}

这样,我们在调用的时候直接传入fn这个回调函数即可,调用方法如下:

var mysql = require(‘./lib/sqlHelper.js‘);//sqlHelper.js文件在lib文件夹下面

var result = mysql.query("select * from student", null, function (err, results, fields) {
    if (results) {
        for (let index = 0; index < results.length; index++) {
            console.log(results[index].name);
        }
    } else {
        console.log("err,msg:" + err);
    }
});

自此,我们也算是大功告成了。

================================================分割线===========================================================

然而,我们还有另外一种实现方式,就是通过Promise这个对象,通过Promise对象我们可以像编写同步程序一样去编写异步代码,从而不用去无限次的嵌套回调函数,sqlHelper.js修改如下:

var mysql = require(‘mysql‘);
var options = {
    host: ‘172.23.88.107‘,
    port: 3306,
    database: ‘test‘,
    user: ‘root‘,
    password: ‘zdsoft‘
};

var pool = mysql.createPool(options);

exports.query = function (sql) {
    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, conn) {
            if (err) {
                reject(err);//让状态变为已失效,并把错误消息传递回去
            } else {
                conn.query(sql, null, function (err, results, fields) {
                    //释放连接
                    conn.release();

                    if (err) {
                        reject(err);
                    } else {
                        resolve(results, fields);//让状态变为已成功,并把成功数据传递回去
                    }
                })
            }
        });
    });
}

调用方法修改如下:

var mysql = require(‘./lib/sqlHelper.js‘);//sqlHelper.js文件在lib文件夹下面

var promise = mysql.query("select * from student");
promise.then(function (results, fields) {
    for (let index = 0; index < results.length; index++) {
        console.log(results[index].name);
    }
}, function (err) {
    console.log(err);
});

可以看到,我们已经没有使用回调函数了。

原文地址:https://www.cnblogs.com/duanjt/p/8718151.html

时间: 2024-08-29 23:08:50

关于nodejs访问mysql的思考的相关文章

开源一个阿里内部的nodejs访问mysql类库

一.背景问题 自nodejs诞生以来出现了一大批的web框架如express koa2 egg等等,前端可以不再依赖后端可以自己控制服务端的逻辑.原来的后端开发同学的阵地前端如今同样也写的风生水起,撸起袖子就是干几周一个项目前端.后端都自己搞定了,那叫一个效率. 虽然各框架都提供了一些自己的接口去简化CRUD操作,但是还是没有解决复杂条件查询.服务端分页等等问题,导致开发过程中很多开发者还是直接拼接SQL来访问数据库.于是我们就想如何让访问数据库变得简单易用. 二.类库设计 操作数据库都可以看作

nodejs 访问mysql

安装 $ npm install mysql 简介 这个一个mysql的nodejs版本的驱动,是用JavaScript来编写的.不需要编译 这儿有个例子来示范如何使用: var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.conn

Nodejs+express+mysql+百度BAE部署node后台

转载请注明出处:http://www.cnblogs.com/shamoyuu/p/node_bae.html 百度有一个应用引擎,价格非常便宜,Java的tomcat每天4毛钱,node每天2毛钱,我以前在上面搭建过一个JavaWeb的项目,今天来说说怎么搭建nodejs+express+mysql的后台. 首先打开console.bce.baidu.com,注册登录完成,然后新建一个应用引擎BAE如下图进行设置 目前基础版的BAE只支持node4.4.4,不过应该已经足够了.如果是用koa2

NodeJS+Express+MySQL开发小记(2):服务器部署

http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过在本地搭建 NodeJS 网站的若干细节.本人最近在阿里云服务器上面按最低配租了4个月的云服务器,所以想试着把这个项目部署到云上.云服务器操作系统是Ubuntu 14.04 LTS.之前一直在Windows下做开发,对于Linux下的环境搭建.配置还不是很熟悉,搭建的过程中学到很多东西. 本文简单记

Nodejs连接MySQL&amp;&amp;实现unity中的登陆注册功能

MySQL是一款常用的开源数据库产品,通常也是免费数据库的首选.查了一下NPM列表,发现Nodejs有13库可以访问MySQL,felixge/node-mysql似乎是最受关注项目,我也决定尝试用一下. 要注意名字,"felixge/node-mysql"非"node-mysql",安装目录 1. node-mysql介绍 felixge/node-mysql是一个纯nodejs的用javascript实现的一个MySQL客户端程序.felixge/node-my

vue+nodejs+express+mysql 建立一个在线网盘程序

vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1.2 安装 MySQL 1.2.1 下载安装 MySQL 1.2.2 可能出现的问题和解决方案 1.3 安装 vue-cli 1.4 安装 express 第二章 数据库设计和创建 2.1 数据库和表设计 2.2 user 表 2.3 file 表 2.4 创建数据库和表所用 sql 语句参考 第三

fedora python访问mysql

1 下载驱动库 http://sourceforge.net/projects/mysql-python/ 2, yum install mysql-dev* yum install python-dev* 3, python setup.py install fedora python访问mysql,布布扣,bubuko.com

在nginx中使用lua直接访问mysql和memcaced达到数据接口的统一

安装nginx参见<nginx+lua+redis构建高并发应用> 让nginx 中的nginx_lua_module支持mysql 和memcache 下载 https://github.com/agentzh/lua-resty-memcached https://github.com/agentzh/lua-resty-mysql 对于访问接口的统一有很多的处理方式,这里介绍使用nginx lua 访问mysql并用memcache缓存起来. 配置如下: ... location /ge

关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作

PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","","0710_test"); //写SQL语句$sql = "select * from student";//检测连接数据库是否成功,失败返回"连接失败",并退出程序 if(mysqli_connect_error()){    die("连