国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

學習使用ExpressJS 4.0中的新Router的用法

2024-05-06 16:46:43
字體:
來源:轉載
供稿:網友

概述

ExpressJS 4.0中提出了新的路由Router。Router好比是一個“迷你版”的express應用,它沒有引入views或者settings,但是提供了路由應有的API,.use,.get,.param和route。

示例應用

讓我們創建一個express應用,僅僅有少量routes和功能:

  • 基礎路由:Home,About
  • 一個把request請求打印到console的路由中間件
  • 一個帶參數的路由
  • 一個校驗特殊參數的路由中間件
  • 一個用于登錄的路由,響應對與路徑/login的GET和POST請求
  • 校驗功能:校驗傳遞給某一個路由的參數

應用文件架構

我們只需要兩個文件:

- package.json // 構建node應用所需要的插件- server.js   // 構建示例應用的啟動文件

我們會把路由代碼寫如server.js文件。將來為了讓示例應用模塊化,我們會把這些路由代碼分別寫入不同的文件,甚至可以為網站的不同組成部分單獨定義不同的路由文件。

創建Node應用

創建node應用,我們需要編寫package.json文件去定義node應用依賴的插件。

{  "name": "express-router-experiments",  "main": "server.js",  "dependencies": {    "express": "~4.0.0"  }}

下面繼續安裝依賴:

$ npm install

現在我們安裝了Express,讓我們繼續編寫server.js去處理路由。

創建server

我們在package.json中指定了main屬性值為server.js,因此Express會使用server.js作為應用的入口文件。

// server.js// 基礎設置// ==============================================var express = require('express');var app   = express();var port  =  process.env.PORT || 8080;// 路由// ==============================================// 示例路由app.get('/sample', function(req, res) {  res.send('this is a sample!'); });// 我們會在這里編寫自己的路由// 啟動server// ==============================================app.listen(port);console.log('Magic happens on port ' + port);

現在我們可以使用命令node server.js啟動server。我們使用app.get創建了一個Express 3時代的路由,如果此時打開瀏覽器訪問http://localhost:8080/sample,我們就能看到這樣下面的文字:this is a sample!。

基本用法 express.Router()

下面我們一起編寫Node應用前端路由的例子,包括Home頁面和About頁面。

// server.js...// 獲取router實例var router = express.Router();// home頁面路由(http://localhost:8080)router.get('/', function(req, res) {  res.send('im the home page!'); });// about頁面路由(http://localhost:8080/about)router.get('/about', function(req, res) {  res.send('im the about page!'); });// 把定義好的路由集成到Node應用中app.use('/', router);...

我們前面的代碼使用express.Router()生成一個路由實例,并定義路由規則,最后把這個路由實例集成到應用中?,F在我們可以通過http://localhost:8080訪問Home頁面,通過http://localhost:8080/about訪問about頁面。

請注意:我們可以改變前面定義的路由中默認的根路徑('/')。如果我們把app.use('/', router)改為app.use('/app', router),那么home頁面的訪問地址變為http://localhost:8080/app,about頁面的訪問地址變為http://localhost:8080/app/about。

這是一個非常有用的功能,我們可以利用它創建多個路由實例express.Router()并把這些實例都集成到Node應用中。例如,可以在Node應用中針對不同功能需求創建不同的路由:一個基礎路由,一個用于權限校驗的路由和其他API路由。如此一來,Node應用變得更加模塊化更容易擴展。

創建路由中間件Router.use()

路由中間件實際是一種允許一個request請求被處理之前進行某些操作的機制。例如,在把一個request請求的響應數據返回給用戶之前,我們可以檢查用戶是否有權限,可以記錄日志等等。
下面我們實現一個打印日志的中間件,每次有一個request請求,我們就在console打印一條信息。

// server.js...// 獲取router實例var router = express.Router();// 路由中間件:每當有一個request請求都會執行router.use(function(req, res, next) {  // 打印request的method和url  console.log(req.method, req.url);  // 繼續處理request請求,尋找匹配的路由  next(); });// home頁面路由 (http://localhost:8080)router.get('/', function(req, res) {  res.send('im the home page!'); });// about頁面路由 (http://localhost:8080/about)router.get('/about', function(req, res) {  res.send('im the about page!'); });// 把定義好的路由集成到Node應用中app.use('/app', router);...

我們用router.use()用來定義了路由中間件,并且把它應用到所有訪問我們Node應用的請求上。打開瀏覽器訪問http://localhost:8080/app,我們可以看到console打印的信息:im the home page!。

在代碼中,中間件和路由的位置順序非常重要。一個request請求到來時,它們會按照代碼中的先后順序依次執行。這就意味著如果你把中間件寫在某一個路由的后面,路由會攔截這個request請求并完成響應,中間件則永遠不會被執行。

帶參數的路由 /hello/:name

我們想要在URL中傳遞一個人的名字name,讓NODE應用輸出 Hello name! 這里可以使用帶參數的路由。

// server.js...// 獲取router實例var router = express.Router();...// 帶參數的路由 (http://localhost:8080/hello/:name)router.get('/hello/:name', function(req, res) {  res.send('hello ' + req.params.name + '!');});// 把定義好的路由集成到Node應用中app.use('/', router);...

現在我們訪問http://localhost:8080/hello/holly就可以看到瀏覽器頁面展示的信息:

Hello holly!

創建參數中間件

如果想要校驗上面傳入URL的人的名字,確保名字是符合規范的,我們需要在路由中間件中去校驗URL中的參數name。它有個特殊的名字,參數中間件。我們可以使用express.param()去創建它。

// server.js...// 獲取router實例var router = express.Router();...// 參數中間件 校驗name參數router.param('name', function(req, res, next, name) {  // 在這里進行校驗操作  console.log('doing name validations on ' + name);  // 校驗通過我們把校驗后的名字賦值給req對象  req.name = name;  // 繼續處理request請求,尋找匹配的路由  next(); });// 帶參數的路由 (http://localhost:8080/hello/:name)router.get('/hello/:name', function(req, res) {  res.send('hello ' + req.name + '!');});// 把定義好的路由集成到Node應用中app.use('/', router);

現在當我們訪問到/hello/:name路由,我們編寫的參數中間件就會介入并做相應的校驗處理。校驗通過我們把校驗后的名字賦值給req對象,并在相應的.get路由中使用req.name獲取校驗后的名字。打開瀏覽器,訪問http://localhost:8080/hello/sally,我們可以看到瀏覽器展示的信息:

Hello sally!

console控制臺打印出:

doing name validations on sally

如果你使用RESTful API,你甚至可以校驗token是否有效,來判斷用戶是否有權限訪問。

鏈式路由

我們也可以直接在app對象上創建路由。利用app.route()可以針對一個路由定義多個路由處理函數。例如,對/login路由發起get請求,展示登錄界面,同時也可以對/login路由發起post請求,提交登錄表單信息。我們就可以使用app.route來創建這個/login路由。

// ROUTES// ==============================================app.route('/login')  // 展示登錄界面 (GET http://localhost:8080/login)  .get(function(req, res) {    res.send('this is the login form');  })  // 提交登錄表單 (POST http://localhost:8080/login)  .post(function(req, res) {    console.log('processing');    res.send('processing the login form!');  });...

總結

使用Express 4.0中的路由,我們可以更靈活的定義路由:

  • 多次使用express.Router()定義一組路由
  • 使用express.Router()劃分模塊,并用app.use()把他們整合起來
  • 使用路由中間件對request請求進行預處理
  • 使用參數中間.param()件對URL中參數進行校驗
  • 使用app.route()創建鏈式路由

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿克陶县| 巴马| 剑川县| 卫辉市| 广西| 乐陵市| 蓬莱市| 荔浦县| 长汀县| 洮南市| 陆丰市| 江孜县| 汶上县| 宜川县| 丘北县| 泸溪县| 巢湖市| 满洲里市| 荃湾区| 桃园市| 大邑县| 克东县| 永州市| 阿合奇县| 沈阳市| 新邵县| 台北县| 太白县| 马关县| 莱芜市| 平乡县| 本溪| 墨江| 拉萨市| 邓州市| 昌图县| 双牌县| 襄樊市| 石渠县| 徐水县| 泌阳县|