【Express系列】第3篇——接入mysql

一般來講,先後端分離的項目,前端負責界面渲染和操做型的業務邏輯,後端則負責數據存取和數據處理相關的業務邏輯。前端

既然設計數據,那就少不了數據庫的使用。目前市面上流行着各類各樣的數據庫,這裏不打算一一列舉,我所選用的是 mysql。node

若是對各數據庫之間的差別感興趣的,能夠本身去查閱相關資料。mysql

 

先打開命令行工具,進入到項目根目錄,而後執行下面指令,安裝 mysql 模塊:sql

npm install mysql --save

 

而後啪啪啪,啪啪啪,碼字過程省略...咱們來看一下碼字結束以後的項目目錄結構是啥樣子的~數據庫

不難發現,項目中多了一個 data 目錄,裏面的內容結構和 routes 目錄十分類似。npm

相信你立刻就會聯想到,難道他們直接有什麼關係麼?後端

下面我就說說我這樣作的設計初衷:瀏覽器

首先,data 目錄下的全部腳本,都是跟 mysql 數據查詢有關係的,它們最終的執行結果是返回查詢所獲得的數據。app

其次,data/modules 目錄下的各個服務模塊,和 routes/modules 目錄下的各個業務邏輯模塊是一一對應關係,各個邏輯模塊引入了對應的服務模塊,調用服務模塊提供的各個方法取得想要的數據。前後端分離

setting.js 是數據庫連接的配置文件,方便在須要的時候引入使用。

connPool.js 最終導出一個能夠建立多個連接的鏈接池對象,由各個服務模塊引入使用。

 

下面看看代碼...

routes/modules/userMod.js

var userSrv = require('../../data/modules/userSrv'),
    userMod = {
    getUserList: function (req, res) {
        userSrv.getUserList(function (data) { res.send(data); });
    },
    checkStatus: function (req, res) {
        res.send('userStatus');
    },
    save: function (req, res) {
        res.send('userSave');
    }
};

module.exports = userMod;

標紅的代碼是修改過的,這裏引入了 userSrv 服務模塊,在 userMod.getUserList 方法中又調用了 userSrv.getUserList 方法獲取用戶列表數據,成功獲取後發送請求響應。

須要補充說明一下的是,這裏只是直接把請求回來的數據輸出到請求響應中去,並不表明實際項目中就這麼簡單。

更多的時候,在請求到數據之後,須要對數據再作處理,包裝成須要的數據格式以後,才輸入到請求響應中。

這些細節這裏就不發散,畢竟需求不一樣,這些處理代碼也會有巨大差別,舉例的意義已經不大。

 

data/settings.js

var settings = {
    host: '127.0.0.1',
    port: 3306,
    database: 'app',
    user: 'root',
    password: 'root'
};

module.exports = settings;

比較簡單,相信是一目瞭然了。

 

data/connPool.js

var settings = require('./settings'),
    mysql = require('mysql'),

    //使用鏈接池的鏈接方式
    pool  = mysql.createPool(settings);

module.exports = pool;

也是很是簡單的一個模塊,不用多講了。

 

data/modules/userSrv.js

var connPool = require('../connPool'),
    userSrv = {
        getUserList: function (callback) {
            connPool.getConnection(function (err, connection) {
                var sql = 'select * from user';
                connection.query(sql, function (err, data) {
                    if (err) throw err;
                    callback(data);
                    connection.release();//釋放連接
                });
            });
        }
    };

module.exports = userSrv;

引入了一個鏈接池對象,先經過 connPool.getConnection 方法獲取鏈接對象,而後執行 sql 語句查詢數據,成功獲取數據以後,執行回調函數。

須要補充說明一下的是,這裏只是一個最最基礎的查詢服務,像複雜一些的有按條件查詢,排序,多表複合查詢等這裏就不發散了,這些問題均可以找到資料去解決之。

關鍵只是你的代碼如何實現,那些細節問題就看我的了。

 

data/modules 裏面的模塊只作 sql 數據操做(查,增,刪,改)

routes/modules 裏面的模塊則負責對取到的數據進行分析處理,格式規範化,最終輸出到請求響應中

 

最後,咱們看看數據庫。這裏我是用 XAMPP 一套搭建的數據庫服務,很是方便。

因爲自己對數據庫的東東也不是特別懂,因此只能提供這個關鍵字。

後面的就本身下載,搭建,實在弄不起來就去找身邊專搞後端的小夥伴詳細諮詢吧。

搭建好數據服務以後,建了一個名爲 app 的數據庫,裏面建了一個 user 表,而後隨便弄了一條數據進去,以下:

 

OK,萬事俱備。是時候跑一跑,看看有沒有問題了。

老規矩,打開命令行工具,進入到項目根目錄,而後執行下面指令,運行應用:

node start

而後用瀏覽器訪問 http://localhost:3000/user/list

看到頁面裏顯示 [{"id":1,"name":"admin","password":"123456"}]

和數據庫裏的數據一致,也就是成功鏈接並從數據庫中取得數據了~

有了開頭,後面的細節就根據需求再慢慢實現了~

相關文章
相關標籤/搜索