Express连接mysql数据库实现简单的数据查询

Dreamer 发布于2015-12-25 收录于 后端开发 约2627字 预计阅读 6 分钟
目录

第一步,安装node.js

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

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

1
 node -v

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

1
v4.2.4   # 我的nodejs版本号

然后输入

1
 npm -v

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

1
3.5.3     # 我的npm版本号

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

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

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

1
2
3
4
5
6
7
8
9
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

添加几条测试数据

1
2
3
4
5
6
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开发框架

1
 npm install -g express   #安装

安装express-generator应用生成器

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

安装mysql的nodejs驱动包

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

安装node supervisor工具包

1
 npm install -g supervisor  #安装

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

第四步,代码实现

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

1
2
3
4
5
 express book-web  #生成一个项目

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

 npm install      #安装项目依赖包

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
.
├── 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驱动包到项目中

1
 npm install mysql -save    # 安装到项目

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//加载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,写入如下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//加载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文件,在文件中写入如下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
// 继承默认布局模版
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');后面添加

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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
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: '微软雅黑'
}

第五步,启动项目,测试

1
     supervisor ./bin/www        # 启动项目

第六步,测试结果

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

nodejs-express-mysq
nodejs-express-mysq

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

参考文档


Dreamer
WRITTEN BY
Dreamer
Web Developer Love Photography and Cooking