Node连接mysql


第一步,安装node.js

打开node.js官网,根据系统选择对应的稳定版本进行下载,windows下建议下载.msi为后缀的安装文件。因为安装好后环境变量也会帮你配置好,新版的nodejs安装好包管理工具npm也会默认帮你安装好。

安装好后使用win+r组合键打开运行对话框,在对话框中输入cmd打开命令窗口,输入

 node -v

如果不报错,并且打印出版本号信息

v4.2.4   # 我的nodejs版本号

然后输入

 npm -v

如果不报错,并且打印出版本号信息

3.5.3     # 我的npm版本号

那么说明nodejs和npm都安装成功了,我使用的nodejs的版本号是v4.2.4 LTS这是一个长期支持的版本。

第二步,数据库中建立一张测试表

打开Navicat连接mysql,新建一个测试数据库bookinfo,选中bookinfo数据库,新建查询编辑器并且输入如下建表语句建立一张books测试表

DROP TABLE IF EXISTS books;
CREATE TABLE  books 
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,    #主键
    book_name VARCHAR(200) NOT NULL,        #书名
    book_author VARCHAR(200) NOT NULL,    #作者 
    book_press VARCHAR(200) NOT NULL,        #出版社
    book_isbn VARCHAR(200) NOT NULL        #isbn    
)ENGINE=INNODB DEFAULT  CHARSET=utf8 AUTO_INCREMENT=1

添加几条测试数据

INSERT INTO books VALUES(null,'Java编程思想(第4版)','[美]埃克尔','机械工业出版社','9787111213826');
INSERT INTO books VALUES(null,'算法导论(原书第3版)','(美)Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein','机械工业出版社','9787111407010');
INSERT INTO books VALUES(null,'编程珠玑(第2版·修订版)','[美]乔恩·本特利(Jon Bentley)','人民邮电出版社','9787115357618');
INSERT INTO books VALUES(null,'深入浅出Node.js','朴灵','人民邮电出版社','9787115335500');
INSERT INTO books VALUES(null,'Node.js权威指南','陆凌牛','机械工业出版社','9787111460787');
INSERT INTO books VALUES(null,'HTML5权威指南','(美)弗里曼','人民邮电出版社','9787115338365');


第三步,全局安装所需的依赖包和工具包

安装expressnodejs中的一个web开发框架

 npm install -g express   #安装

安装express-generator应用生成器

 npm install express-generator -g  #可以帮我们快速创建一个应用的基本结构

安装mysql的nodejs驱动包

 npm install -g mysql      #全局安装驱动包

安装node supervisor工具包

 npm install -g supervisor  #安装
node.js程序启动后,每次修改了文件必须重新启动服务才会生效,这样的设计提高了性能,却不利于开发调试,supervisor可以帮助我们监视代码的变动,一旦代码有所改变就自动重启服务。

第四步,代码实现

使用express-generator生成express基本项目结构

 express book-web  #生成一个项目

 cd book-web    #进入生成的项目

 npm install      #安装项目依赖包

如下就是express-generator帮我们创建的项目的基本结构

.
├── app.js
├── bin
│   └── www            #项目的入口
├── package.json
├── public            #静态资源文件夹
│   ├── images                #图片资源
│   ├── javascripts            #javascript文件
│   └── stylesheets            #样式文件
│       └── style.css
├── routes            #路由文件夹
│   ├── index.js
│   └── users.js
└── views            #视图文件夹 
    ├── error.jade
    ├── index.jade
    └── layout.jade

安装mysql驱动包到项目中

 npm install mysql -save    # 安装到项目

routes中添加一个book.js文件,将如下内容写入book.js

//加载express
var express = require('express');

//通过express获取Router对象
var router = express.Router();

//加载bookDao
var bookDao = require('../dao/bookDao');

//拦截/book请求
router.get('/', function(req, res, next) {
    res.send('respond with a resource');
});

/**
 * 查询全部书籍信息
 * 访问链接 localhost:3000/book/queryAll
 * @param  {[type]} req   [description]
 * @param  {[type]} res   [description]
 * @param  {[type]} next) {               bookDao.query(req, res, next);} [description]
 * @return {[type]}       [description]
 */
router.get('/queryAll', function(req, res, next) {

    bookDao.queryAll(req, res, next);

});


module.exports = router;

项目根目录新建dao文件夹,并且在文件夹中新建bookDao.js,写入如下代码


//加载mysql驱动
var mysql = require('mysql');

//创建连接  
var client = mysql.createConnection({
    host: '192.168.1.200', //数据库的ip地址
    user: 'root',
    password: 'root',
    database: 'bookinfo',
    port: 3306
});

//连接
client.connect();

module.exports = {
    queryAll: function(req, res, next) {
    client.query('select * from books', function(err, results, fields) {
        if (err) {
        throw err;
        }
        if (results) {
        // 返回json
        // res.json(results);
        var arr = [];
        for (var i = 0; i < results.length; i++) {
            console.log("%d\t%s\t%s", results[i].id, results[i].book_name, results[i].book_author, results[i].book_press, results[i].book_isbn);
            var book = {};
            book.id = results[i].id;
            book.name = results[i].book_name;
            book.author = results[i].book_author;
            book.press = results[i].book_press;
            book.isbn = results[i].book_isbn;
            arr.push(book);
        }
        //返回视图
        res.render('book', {
            "data": arr,
            "name": "李明",
            "pwd": "123456"
        });
        }
        client.end();
    });
    }
}

views文件夹中新建book.jade文件,在文件中写入如下内容


// 继承默认布局模版
extends layout
block content
  h1 图书信息列表
  table
   tr
     th="ID"
     th="书名"
     th="作者"
     th="出版社"
     th="ISBN"
   //迭代后台传过来的数据 
   each item in data
    tr
     td=item.id
     td=item.name
     td=item.author
     td=item.press
     td=item.isbn
jade是express默认的模版渲染引擎,如果觉的这种代码方式不习惯,你也可以安装使用ejs模版引擎

修改项目根目录的app.js文件在var users = require('./routes/users');后面添加


var book = require('./routes/book');  #加载book路由

app.use('/users', users);后面添加


app.use('/book', book)  #指定/book路径使用的路由

简单修改下tableh1的样式,在public/stylesheets/style.css文件中添加如下代码


h1{
    font-size:36px;
}

table,
table td,
table th {
    border: 1px solid #999999;
    border-collapse: collapse;
    padding:10px;
}

table th{
    background-color: #e3e3e3;
    color: #cf4646;
    font-size:16px;
    font-family: '微软雅黑'
}

第五步,启动项目,测试

     supervisor ./bin/www        # 启动项目

第六步,测试结果

浏览器输入  http://localhost:3000/book/queryAll

93577-pvzs92ukha.png

到此使用nodejs+express+mysql实现的简单数据单表数据全查操作已经完成。

参考文档

技术更新换代比较快,此文章发布时间较远,请以最新的官方文档为准!

声明:极客凡凡|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Node连接mysql


Less Is More!