Node.js後端開發 - 進階篇 #9 express框架之路由模塊的封裝2(相對安全)

目錄

一、前言

二、路由模塊的封裝2(相對安全)

模型圖思路參考

步驟1:寫主模塊app.js

步驟2:寫配置模塊 config.js

步驟3:寫路由模塊 router.js

三、路由代碼思路分析總結


一、前言

上一篇文章我們講了express路由模塊的封裝,以及複習了npm init -y初始化項目、express的安裝等知識點。詳見可參考博文:Node.js後端開發 - 進階篇 #8 express框架之路由模塊的封裝1 上篇文章對express路由模塊的封裝是我們直接可以想到的思維方式,雖然這麼寫可以實現功能,但是express並不推薦這麼寫,不太安全。這篇文章我們將基於上篇路由模塊的封裝代碼進行修改

二、路由模塊的封裝2(相對安全)

模型圖思路參考

項目初始化和express安裝使用這裏就不說了,可見上一篇文章。首先我們看一個模型圖

1、首先在 router.js 裏面創建一個路由對象,

2、用 router 對象去設置一些路由,如:get、post等,設置完成以後把 router 對象返回給 app.js

3、在 app.js裏面就能拿到這個 router 對象了,

4、把這個設置好的 router 對象通過 use 函數與 app 對象相關聯

5、相關聯以後,router.js 裏面的路由就都能啓作用了

這種做法就不需要我們把 app 對象傳遞給 router.js,下面我們直接開始正式代碼( 已經有詳細註釋,就不多說了 )

步驟1:寫主模塊app.js


// app.js 模塊職責:負責啓動服務

//1. 加載 express 模塊
var express = require('express');
//加載 config.js 模塊
var config = require('./config.js');
//加載路由模塊
var router = require('./router.js');

//2. 創建 app 對象
var app = express();

// 這個router,它既是一個對象也是一個函數
// 這個函數,它也是一箇中間件
// 我們可以打印看看:
console.log(router.toString());
// 看源碼,
// function router(req, res, next) {
//    router.handle(req, res, next);
//  }
//它是一個函數,裏面調用了router的handle方法


//3. 啓動路由
// 設置 app 和 router 相關聯
// 這個router,它既是一個對象也是一個函數
// 這個函數,它也是一箇中間件
app.use('/', router);

//4. 啓動服務
app.listen(config.port, function () {
    console.log('http://localhost:'+config.port);
});


步驟2:寫配置模塊 config.js


// 配置模塊: 主要職責是負責保存項目中的配置信息

module.exports = {
    port : 3000
};


步驟3:寫路由模塊 router.js


//路由模塊:主要負責路由判斷

//1. 創建一個 router 對象(router 對象既是一個對象,也是一個函數)
var express = require('express');
var router = express.Router();

//2. 通過 router 對象設置(掛載)路由
router.get('/', function (req, res) {
     console.log("當前根目錄");
});

router.get('/index', function (req, res) {
    console.log("index");
}); 

//3. 返回 router 對象
module.exports = router;

三、路由代碼思路分析總結

// 當我們運行路由代碼,如代碼

router.get('/', function (req, res) {
    console.log("根目錄");
});

router.get('/index', function (req, res) {
    console.log("index");
 }); 

// 這兩個路由的請求並沒有發生,它只是配置設置好了路由。其實我們在這裏設置路由的含義是:

// 內部它會幫我們生成保存一個路由表,這個路由表是以鍵值對的形式存在。

// 如:我們可以把請求方法(get)和請求路徑('/') 看作爲鍵,

// 把執行的回調函數 function (req, res) { } 看作爲值。

// 然後 router 設置掛載完以後,我們暴露返回 router 對象 module.exports = router;

 

// 然後我們在 app.js 裏面,加載路由模塊。var router = require('./router.js');

// 拿到 router 對象,它裏面就是一個路由表,路由表裏面是一堆鍵值對形式的路由。

// 然後通過 app.use('/', router); 關聯app對象,把 router 對象的路由表設置給 app 對象

// 另外需要注意:

app.use('/', router);
app.use(router);

// 它們是等價的。下面兩個函數的寫法也是等價的

app.use('/', function (params) {

});

app.use(function (params) {

);

// 也就是說第一個參數不傳,它會自動默認傳根目錄路徑。

// 有興趣的朋友可以去看看源碼,express 的源碼都在這個 node_modules/express/lib 下面。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章