最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學(xué)習(xí)使用ExpressJS 4.0中的新Router的用法

 更新時間:2018年11月06日 10:03:49   作者:MaxWang  
ExpressJS 4.0中提出了新的路由Router,提供了路由應(yīng)有的API,本文詳細(xì)的介紹了ExpressJS 4.0中的新Router的用法,非常具有實(shí)用價值,需要的朋友可以參考下

概述

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

示例應(yīng)用

讓我們創(chuàng)建一個express應(yīng)用,僅僅有少量routes和功能:

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

應(yīng)用文件架構(gòu)

我們只需要兩個文件:

- package.json // 構(gòu)建node應(yīng)用所需要的插件
- server.js   // 構(gòu)建示例應(yīng)用的啟動文件

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

創(chuàng)建Node應(yīng)用

創(chuàng)建node應(yīng)用,我們需要編寫package.json文件去定義node應(yīng)用依賴的插件。

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

下面繼續(xù)安裝依賴:

$ npm install

現(xiàn)在我們安裝了Express,讓我們繼續(xù)編寫server.js去處理路由。

創(chuàng)建server

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

// server.js

// 基礎(chǔ)設(shè)置
// ==============================================

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);

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

基本用法 express.Router()

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

// server.js

...

// 獲取router實(shí)例
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應(yīng)用中
app.use('/', router);

...

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

請注意:我們可以改變前面定義的路由中默認(rèn)的根路徑('/')。如果我們把a(bǔ)pp.use('/', router)改為app.use('/app', router),那么home頁面的訪問地址變?yōu)閔ttp://localhost:8080/app,about頁面的訪問地址變?yōu)閔ttp://localhost:8080/app/about。

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

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

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

// server.js

...

// 獲取router實(shí)例
var router = express.Router();

// 路由中間件:每當(dāng)有一個request請求都會執(zhí)行
router.use(function(req, res, next) {

  // 打印request的method和url
  console.log(req.method, req.url);

  // 繼續(xù)處理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應(yīng)用中
app.use('/app', router);

...

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

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

帶參數(shù)的路由 /hello/:name

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

// server.js
...
// 獲取router實(shí)例
var router = express.Router();
...

// 帶參數(shù)的路由 (http://localhost:8080/hello/:name)
router.get('/hello/:name', function(req, res) {
  res.send('hello ' + req.params.name + '!');
});

// 把定義好的路由集成到Node應(yīng)用中
app.use('/', router);
...

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

Hello holly!

創(chuàng)建參數(shù)中間件

如果想要校驗上面?zhèn)魅險RL的人的名字,確保名字是符合規(guī)范的,我們需要在路由中間件中去校驗URL中的參數(shù)name。它有個特殊的名字,參數(shù)中間件。我們可以使用express.param()去創(chuàng)建它。

// server.js
...

// 獲取router實(shí)例
var router = express.Router();

...

// 參數(shù)中間件 校驗name參數(shù)
router.param('name', function(req, res, next, name) {
  // 在這里進(jìn)行校驗操作
  console.log('doing name validations on ' + name);

  // 校驗通過我們把校驗后的名字賦值給req對象
  req.name = name;
  // 繼續(xù)處理request請求,尋找匹配的路由
  next(); 
});

// 帶參數(shù)的路由 (http://localhost:8080/hello/:name)
router.get('/hello/:name', function(req, res) {
  res.send('hello ' + req.name + '!');
});

// 把定義好的路由集成到Node應(yīng)用中
app.use('/', router);

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

Hello sally!

console控制臺打印出:

doing name validations on sally

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

鏈?zhǔn)铰酚?/strong>

我們也可以直接在app對象上創(chuàng)建路由。利用app.route()可以針對一個路由定義多個路由處理函數(shù)。例如,對/login路由發(fā)起get請求,展示登錄界面,同時也可以對/login路由發(fā)起post請求,提交登錄表單信息。我們就可以使用app.route來創(chuàng)建這個/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!');
  });

...

總結(jié)

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

  • 多次使用express.Router()定義一組路由
  • 使用express.Router()劃分模塊,并用app.use()把他們整合起來
  • 使用路由中間件對request請求進(jìn)行預(yù)處理
  • 使用參數(shù)中間.param()件對URL中參數(shù)進(jìn)行校驗
  • 使用app.route()創(chuàng)建鏈?zhǔn)铰酚?/li>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用node-webkit把web應(yīng)用打包成桌面應(yīng)用(windows環(huán)境)

    用node-webkit把web應(yīng)用打包成桌面應(yīng)用(windows環(huán)境)

    這篇文章主要介紹了windows環(huán)境下用node-webkit把web應(yīng)用打包成桌面應(yīng)用的教程,需要的朋友可以參考下
    2018-02-02
  • pm2啟動ssr失敗的解決方法

    pm2啟動ssr失敗的解決方法

    這篇文章主要介紹了pm2啟動ssr失敗的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • Nodejs的express使用教程

    Nodejs的express使用教程

    Express 是一個簡潔、靈活的 node.js Web 應(yīng)用開發(fā)框架, 它提供一系列強(qiáng)大的特性,幫助你創(chuàng)建各種 Web 和移動設(shè)備應(yīng)用,本篇文章給大家介紹nodejs的express使用教程,感興趣的朋友參考下
    2015-11-11
  • Windows 系統(tǒng)下設(shè)置Nodejs NPM全局路徑

    Windows 系統(tǒng)下設(shè)置Nodejs NPM全局路徑

    這篇文章主要介紹了Windows 系統(tǒng)下設(shè)置Nodejs NPM全局路徑
    2016-04-04
  • node版本太高導(dǎo)致項目跑不起來的解決辦法(windows)

    node版本太高導(dǎo)致項目跑不起來的解決辦法(windows)

    換了臺電腦后,安裝node,一切完美,發(fā)現(xiàn)其中有一個uniapp的小程序項目跑不起來,感覺是node版本太高導(dǎo)致的,所以只能重新安裝低版本的node,本文給大家介紹了node版本太高的解決辦法,需要的朋友可以參考下
    2023-10-10
  • 初識Node.js

    初識Node.js

    本文主要是簡單講訴了Node.js的介紹,安裝,希望對剛剛接觸Node.js的同學(xué)能有所幫助,有什么問題可以給我留言,一起學(xué)習(xí)進(jìn)步
    2014-09-09
  • koa+mongoose實(shí)現(xiàn)簡單增刪改查接口的示例代碼

    koa+mongoose實(shí)現(xiàn)簡單增刪改查接口的示例代碼

    這篇文章主要介紹了koa+mongoose實(shí)現(xiàn)簡單增刪改查接口的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Node.js實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條

    Node.js實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條

    這篇文章給大家介紹了如何實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條,如果你的工作用過上傳圖片或上傳大文件啥的,一般在IE低版本瀏覽器里,會切換到用flash解決,可是有些人肯定不會為了老舊IE的進(jìn)度條而去學(xué)flash,那么下面來一起看看吧。
    2016-09-09
  • node.js中的path.delimiter方法使用說明

    node.js中的path.delimiter方法使用說明

    這篇文章主要介紹了node.js中的path.delimiter方法使用說明,本文介紹了path.delimiter的方法說明、語法、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js 利用cheerio制作簡單的網(wǎng)頁爬蟲示例

    Node.js 利用cheerio制作簡單的網(wǎng)頁爬蟲示例

    本篇文章主要介紹了Node.js 利用cheerio制作簡單的網(wǎng)頁爬蟲示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論

肃北| 涟源市| 庆云县| 报价| 虎林市| 安康市| 若羌县| 威信县| 宜良县| 含山县| 东源县| 富顺县| 平利县| 夏津县| 土默特左旗| 清镇市| 綦江县| 高要市| 冀州市| 民权县| 克什克腾旗| 东乌珠穆沁旗| 巴彦淖尔市| 乌拉特中旗| 岢岚县| 清远市| 龙里县| 天等县| 清远市| 思南县| 资溪县| 兴文县| 昂仁县| 门源| 大邑县| 宜春市| 四会市| 安福县| 桐城市| 凉山| 岳普湖县|