gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

值得了解的Node express路由使用技巧

本篇文章就來給大家介紹一些你不知道的Node express 路由使用技巧,希望對大家有所幫助!

值得了解的Node express路由使用技巧

node.js極速入門課程:進入學習

在之前的文章中我們說到express為我們提供的最強大的能力就是一套超級簡單且強大的路由系統,那到底什么是路由呢?

路由是指如何定義應用的端點(URIs)以及如何響應客戶端的請求。【相關教程推薦:nodejs視頻教程】

路由是由一個 URIHTTP 請求(GETPOST等)和若干個句柄組成,它的結構如下:

app.METHOD(path, [callback...], callback)
登錄后復制

  • appexpress 對象的一個實例
  • METHOD 是一個 HTTP 請求方法
  • path 是服務器上的路徑
  • callback 是當路由匹配時要執行的函數

這篇文章我們將深入去學習express的路由系統,讓我們開始吧!

1、基礎路由

先定義一個基礎的路由:

const express = require("express");  // app對象 const app = express();  app.get("/", (req, res) => {     res.send("匹配/"); });
登錄后復制

上面的例子表示的是一個路徑為/GET請求路由,即當用戶使用GET請求訪問/時會執行(req, res) =>{res.send("匹配/");}函數。

路由路徑請求方法一起定義了請求的端點:

// 匹配 / 路徑的get請求 app.get("/", (req, res) => {     res.send("匹配 / 路徑的get請求"); }); // 匹配 / 路徑的post請求 app.post("/", (req, res) => {     res.send("匹配 / 路徑的post請求"); }); // 匹配 / 路徑的put請求 app.put("/", (req, res) => {     res.send("匹配 / 路徑的put請求"); }); // 匹配 / 路徑的delete請求 app.delete("/", (req, res) => {     res.send("匹配 / 路徑的delete請求"); });
登錄后復制

觀察上面的路由你會發現它們的請求路徑是一樣的,只是請求方式不同,這是允許的,因為相同路徑的請求只要請求方法不同最后就會進入到不同的處理函數中。

這種風格的寫法稱為RES Tful,在開發API接口中比較推薦使用

RES Tful特點包括:
1、每一個URI代表1種資源;
2、客戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源;
3、通過操作資源的表現形式來操作資源;
4、資源的表現形式是XML或者HTML;
5、客戶端與服務端之間的交互在請求之間是無狀態的,從客戶端到服務端的每個請求都必須包含理解請求所必需的信息。

2、路徑匹配

express的路由可以進行模糊匹配,這是因為express的路由路徑可以是字符串字符串模式或者正則表達式

字符串匹配

當路徑使用字符串時進行的就是普通的匹配,路徑是什么就匹配什么:

// 匹配根路徑的請求 app.get('/', function (req, res) {   res.send('root'); });  // 匹配 /about 路徑的請求 app.get('/about', function (req, res) {   res.send('about'); });
登錄后復制

字符串模式匹配

在字符串的基礎上添加一些額外的語法(如下)稱為字符串模式

  • ? 表示可選
  • :id 表示使用id字段占位
  • + 表示可出現多次(至少一次)
  • * 表示任意

使用字符串模式的路徑:

// 匹配 /acd 和 /abcd:?前邊的字符代表可選 app.get("/ab?cd", function (req, res) {     res.send("ok"); });  // 匹配 /ab/*******::id代表占位,這個id是自定義的(你也可以寫:aa,:bb等),之后能用來獲取/ab/后的參數 app.get("/ab/:id", function (req, res) {     res.send("/ab/*******"); });  // 匹配 /abcd,/abbcd,/abbbcd等,+號前的字符可以連續出現多個 app.get("/ab+cd", function (req, res) {     res.send("/ab+cd"); });  // 匹配 /abcd,/abxcd,/abBIHIHIcd,/ab1456cd等,*號代表任意字符 app.get("/ab*cd", function (req, res) {     res.send("/ab*cd"); });  // 匹配 /abe,/abcde,可以使用括號包裹多個字符形成一個整體 app.get("/ab(cd)?e", function (req, res) {     res.send("/ab(cd)?e"); });
登錄后復制

正則匹配

express路由匹配中最強大的一點就是它能夠根據正則來進行匹配(雖然這在開發中用處不多)。

使用正則表達式的路由路徑:

// 匹配任何路徑中含有 a 的路徑: app.get(/a/, function (req, res) {     res.send("/a/"); });  // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 app.get(/.*fly$/, function (req, res) {     res.send("/.*fly$/"); });
登錄后復制

3、處理函數

可以為請求處理提供多個回調函數,其行為類似 中間件

唯一的區別是這些回調函數有可能調用 next('route')next('router') 方法而略過其他路由回調函數。

多函數

使用多個回調函數處理路由(記得指定 next 對象):

// 直接添加多個回調函數 app.get(     "/",     (req, res, next) => {         console.log("第一個執行");         next();     },     (req, res, next) => {         console.log("第二個執行");         next();         // next('route') next中添加route參數時會跳過之后的回調函數     },     (req, res) => {         console.log("最后一個執行");         // 返回數據內容         res.send("home");     } );
登錄后復制

調用next()就是意味著放行去執行下一個函數

注意:向客戶端返回信息的操作(res.send)要放到最后一個處理函數中,如果放到前面則會阻止后面處理函數的運行(這樣的話,后面定義的處理函數有什么意義?),并且當res.sendnext()處于一個處理函數中時會報錯

函數數組

還可以以數組的形式添加回調函數:

const f1 = (req, res, next) => {     console.log("第一個執行");     next(); }; const f2 = (req, res, next) => {     console.log("第二個執行");     next(); }; const f3 = (req, res) => {     console.log("最后一個執行");     res.send("login"); }; app.get("/login", [f1, f2, f3]);
登錄后復制

混合使用

混合使用函數和函數數組處理路由:

const fn1 = function (req, res, next) {     console.log("fn1");     next(); };  var fn2 = function (req, res, next) {     console.log("fn2");     next(); };  app.get(     "/about",     [fn1, fn2],     function (req, res, next) {         console.log("fn3");         next();     },     function (req, res) {         res.send("about");     } );
登錄后復制

應用

可以利用該機制為路由定義前提條件,如果在現有路徑上繼續執行沒有意義,則可將控制權交給剩下的路徑。

例如在開發中經常使用到的token驗證,假如現在共有三個接口:

  • /login 用戶登錄的接口,不需要token驗證
  • /home 只有token驗證通過才能訪問
  • /user 只有token驗證通過才能訪問

這時我們就可以這樣開發:

// 不需要token驗證 app.get("/login", (req, res) => {     res.send("登錄"); });  // 驗證token的函數(可插拔,可復用的中間件) const isToken = (req, res, next) => {     // 驗證token是否過期,isVaild代表token是否有效     // 一些操作     const isVaild = true; // 假設驗證通過          if (isVaild) {         // 驗證通過了就調用next向下執行         console.log("token驗證通過");         // 如果想要在回調函數之間傳遞數據,我們可以選擇將數據掛載到res參數上         res.ailjx = "海底燒烤店ai";         next();     } else {         // 返回錯誤         // 這里res.send后后面的回調函數就不會再執行了         res.send("token驗證失敗!");     } };  // 只有token有效時才生效的接口 app.get("/home", [isToken], (req, res) => {     // 返回數據內容     // res.ailjx:獲取驗證token的函數在res上綁定的數據     res.send("home" + res.ailjx); });  app.get("/user", [isToken], (req, res) => {     // 返回數據內容     res.send("user"); });
登錄后復制

上面我們將驗證token的函數抽離了出去,之后在需要該函數的路由中直接引用即可,這就避免了我們需要在每個路由中都寫一遍token驗證的繁瑣過程。

4、路由級中間件

上面我們定義的路由都是直接綁定到了app對象上,這稱為應用級中間件

應用級中間件綁定到 app 對象 使用 app.use()app.METHOD(), 其中, METHOD 是需要處理的 HTTP 請求的方法,例如 get, put, post 等等,全部小寫。

當我們的路由過多時,這勢必會變得難以維護,于是就出現了路由級中間件用來將我們的路由抽離出來,路由級中間件和應用級中間件一樣,只是它綁定的對象為 express.Router()

// apiRouter.js const express = require("express"); // router對象 const router = express.Router();  // 路由級別中間件:api路由 router.get("/home", (req, res) => {     res.send({         list: [1, 2, 3, 4],     }); });  router.get("/about", (req, res) => {     res.send({         name: "ailjx",         age: 18,     }); });  // 導出 module.exports = router;
登錄后復制

// server.js const express = require("express"); const app = express(); // 導入api路由 const apiRouter = require("./route/apiRouter");  // 使用app.use將路由掛載至應用 app.use(apiRouter);  app.listen(3000, () => {     console.log("start"); });
登錄后復制

上面我們使用路由級中間件定義路由,之后通過模塊化導入的形式將路由導入,再使用app.use將路由掛載至應用,這種代碼結構就使得整個項目變得更加容易維護。

在掛載路由時我們也可以指定一級路徑:

// 如果use具有第一個路徑參數,如下面的/api,則/api相當于是一級路徑,apiRouter里的路徑就相當于二級路徑了 app.use("/api", apiRouter);
登錄后復制

這樣掛載后的路由訪問時就需要加上/api,如:

  • /api/home
  • /api/about

結語

本篇文章詳細介紹了express路由的使用,并由此引入路由級中間件的使用(關于express中間件博主之后會出單獨的文章進行講解)。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
尤蜜粉嫩av国产一区二区三区| 成人亚洲免费视频| 三级网在线观看| 制服丝袜中文字幕第一页| 亚洲天堂2018av| 亚洲福利精品视频| 999这里有精品| 日韩不卡的av| 黄色一级片国产| www.xxx麻豆| 欧美性大战久久久久xxx| 国产精品无码av在线播放 | 加勒比成人在线| 成年人午夜视频在线观看| 欧美精品一区二区三区三州| 国产av国片精品| 国产情侣av自拍| 亚洲综合20p| bt天堂新版中文在线地址| 九色自拍视频在线观看| 欧美视频第三页| 污视频网站观看| 成年在线观看视频| 亚洲国产精品久久久久婷蜜芽| 噜噜噜久久亚洲精品国产品麻豆| 欧美一级黄色影院| 亚洲一二三不卡| 成年人看的毛片| 香蕉视频禁止18| 9色porny| 欧美美女一级片| 乱人伦xxxx国语对白| 在线视频日韩一区| 国产美女永久无遮挡| 99免费视频观看| 青青草视频在线视频| av五月天在线| 成人精品视频在线播放| www.精品在线| 欧美一级在线看| 青青草免费在线视频观看| 欧美日韩在线不卡视频| 8x8x华人在线| 亚洲欧美日韩三级| 欧美日韩精品在线一区二区| 在线播放黄色av| 北条麻妃av高潮尖叫在线观看| 欧美爱爱视频网站| jizzzz日本| 日韩毛片在线免费看| 久久久久久久9| 中文字幕av久久| 亚洲黄色av片| 思思久久精品视频| 国产a级片免费观看| 日日橹狠狠爱欧美超碰| 91传媒免费视频| 搡的我好爽在线观看免费视频| 天天操天天摸天天爽| 国产主播在线看| 给我免费播放片在线观看| 无码人妻精品一区二区蜜桃百度| 国产精品久久久久久9999| 国产视频手机在线播放| 国产情侣av自拍| 韩国一区二区av| 日韩精品一区二区三区不卡| 99色精品视频| 国产免费又粗又猛又爽| 超碰在线人人爱| 成人日韩在线视频| 手机免费av片| 裸体裸乳免费看| 美女黄色免费看| 人妻精品无码一区二区三区| 亚洲色欲综合一区二区三区| 白嫩少妇丰满一区二区| 五月天婷婷激情视频| 亚洲另类第一页| 一级黄色免费在线观看| 警花观音坐莲激情销魂小说| 激情五月婷婷六月| 一二三四视频社区在线| 18禁男女爽爽爽午夜网站免费| aa免费在线观看| 中文字幕久久av| 久久精品一卡二卡| 美脚丝袜脚交一区二区| 亚洲欧美另类动漫| 一级特黄妇女高潮| 日本韩国欧美在线观看| 无码人妻丰满熟妇区五十路百度| 日韩不卡一二三| www.亚洲成人网| 热久久精品国产| 国产精品美女在线播放| 国产一线二线三线女| 国内自拍视频网| 国产真实老熟女无套内射| 国产野外作爱视频播放| 老司机激情视频| 91高清国产视频| 日本国产在线播放| 99久久99精品| 人妻少妇被粗大爽9797pw| 亚洲AV无码成人精品一区| www黄色av| 日本一级黄视频| 国产又粗又长又爽又黄的视频| 免费看黄在线看| 国产欧美综合一区| 亚洲 欧美 日韩系列| www插插插无码视频网站| 免费精品99久久国产综合精品应用| 给我免费播放片在线观看| 亚洲精品免费一区亚洲精品免费精品一区 | 男人插女人视频在线观看| 污污视频网站在线| 黑森林福利视频导航| 99在线免费视频观看| 亚洲美女自拍偷拍| 不用播放器的免费av| 亚洲少妇第一页| 夫妻免费无码v看片| 美脚丝袜脚交一区二区| 国产成人生活片| 亚洲国产精品女人| 国产美女视频免费| 中文字幕第66页| 国产高清免费在线| 1314成人网| 欧美日韩dvd| 超碰人人爱人人| 女人被男人躁得好爽免费视频| dy888午夜| 国产黄色激情视频| 国产真人做爰毛片视频直播| 免费在线黄网站| 青青青国产在线观看| 大荫蒂性生交片| av免费观看大全| www黄色av| 亚洲美女性囗交| 国产卡一卡二在线| 欧美成人三级在线视频| 成人性免费视频| 精品久久久噜噜噜噜久久图片| 欧美少妇性生活视频| 超碰成人在线播放| 做爰高潮hd色即是空| 99在线观看视频免费| 日本一区二区黄色| 亚洲高清免费在线观看| 欧美xxxxxbbbbb| 成人免费性视频| 日韩一区二区三区不卡视频| 欧美h视频在线观看| 国产无限制自拍| 91看片在线免费观看| 欧美aaa在线观看| 丰满爆乳一区二区三区| 天堂网在线免费观看| 欧洲精品在线播放| 无遮挡又爽又刺激的视频| 中文字幕亚洲影院| 成人免费a级片| 伊人网在线综合| 黄色三级中文字幕| 在线免费观看av的网站| 国产色一区二区三区| 中文字幕成人在线视频| 国产免费黄色小视频| 天堂在线中文在线| 大肉大捧一进一出好爽视频| www.偷拍.com| 九九热免费精品视频| 3d动漫一区二区三区| www亚洲国产| gai在线观看免费高清| 欧美变态另类刺激| www婷婷av久久久影片| 久久综合在线观看| www.日日操| 国产成人精品视频免费看| 伊人网在线免费| 国产成人精品免费看在线播放| 北条麻妃av高潮尖叫在线观看| 日韩五码在线观看| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 中文字幕日本最新乱码视频| 国产人妻互换一区二区| 中文字幕视频三区| 中文字幕第36页| 五月婷婷六月合| www亚洲成人| 爱情岛论坛亚洲首页入口章节| 久久精品国产精品亚洲色婷婷| 秋霞无码一区二区| 成人午夜免费在线| 97国产在线播放|