Express 入門之Router - worldtree_keeper的專欄 - CSDN博客

要了解Router我們需要先知道到Application,首先,每一個express實例本身內部就內建了router,所以我們先從簡單的下手,先使用application;另外這里我們只選擇get方法,作為我們Router.Method, 之所以使用get是因為它足夠簡單;

?

精確匹配形式

1. get有很多種用法

?

?
  1. var express = require("express");

  2. var app = express();

  3. app.get("/example/c",function(req, res){

  4. res.send("Your url is /example/c");

  5. });

  6. app.listen(3000);

?

?

2. 參數形式

?

?

?
  1. var express = require("express");

  2. var app = express();

  3. app.get('/user/:userid',function(req, res){

  4. res.send(req.params.userid);

  5. });

  6. app.listen(3000,function(){console.log("server is listening on port 3000")});

?

參數形式另外的高級應用

?

3. 正則表達式的形式

?

?
  1. var express = require('express');

  2. var app = express();

  3. app.get(/example/,function(req, res){

  4. res.send('it is use regular expression');

  5. });

  6. app.listen(3000);

?

?

?

4.? 神秘的參數 next

?

?

?
  1. var express = require('express');

  2. var app = express();

  3. var func1 = function(req, res, next){

  4. console.log("this is first func");

  5. next();

  6. }

  7. var func2 = function(req, res, next){

  8. //不能這么寫,因為這樣就相當于后面有設置了一遍head

  9. //res.send("this second func");

  10. console.log("this is second func");

  11. next();

  12. }

  13. var func3 = function(reg,res){

  14. console.log("this is thrid func");

  15. res.send("this is in the func3, end");

  16. }

  17. ?
  18. //使用方式1

  19. app.get("/example/",func1,func2,func3);

  20. ?
  21. //使用方式2

  22. app.get("/example/",[func1,func2,func3]);

?

匹配好之后就是res

res也有很多種形式

比如jsonp

?

?
  1. var express = require('express');

  2. var app = express();

  3. app.get('/example/defaultCallback?callback=foo',function(req, res){

  4. res.jsop({"message":"this is default callback"});

  5. });

  6. app.get('/example/customizeCallback?cb=foo2',function(req, res){

  7. app.set("jsonp callback name", 'cb');

  8. res.jsonp({"message":"this is customize callback"});

  9. })

  10. app.listen(3000);

默認情況下:http://localhost:3000/example/b?callback=foo

指定情況下:http://localhost:3000/example/c?cb=foo2

?

比如redirect

?
  1. app.get("/example/d", function(req, res) {

  2. var ua = req.get("user-agent");

  3. if (!!ua && ua.toLowerCase().match(/android|ipad|iphone|ipod/)) {

  4. console.log("this is mb");

  5. res.redirect("http://m.browser.baidu.com/mb");

  6. } else {

  7. console.log("This is pc");

  8. res.redirect("http://m.browser.baidu.com/pc");

  9. }

  10. });

?

http://localhost:3000/example/d

在chrome里面,打開開發者模式,切換模擬器。


?


參數形式高級應用

?

?
  1. var express = require('express');

  2. var app = express();

  3. app.get('/user/:userage/:userid', function(req, res, next) {

  4. console.log("in get method: userid:", req.params.userid);

  5. console.log("in get method: userage:", req.params.userage);

  6. next();

  7. });

  8. ?
  9. ?
  10. app.param("userage", function(req, res, next, value, key) {

  11. console.log("in param key:", key);

  12. console.log("in param value:", value);

  13. next();

  14. });

  15. ?
  16. ?
  17. app.param("userid", function(req, res, next, value, key) {

  18. console.log("in param key:", key);

  19. console.log("in param value:", value);

  20. next();

  21. });

  22. ?
  23. ?
  24. app.get('/user/:userid/:userage', function(req, res, next) {

  25. res.send("userid and userage are:", req.params.userid, req.params.userage);

  26. });

  27. app.listen(3000);

?

?

前后順序與app.param的順序無關,只與

app.get('/user/:userage/:userid', function(req, res, next) 的順序有關。

?

OK,Application基本學習完畢了,我們就來說一下Router,其實沒有什么大不同,基本上是一致的。

Router有幾種參數形式:

1. function(func){}

2. function(url, function){}

第1種主要是針對于這個路由下的所有情況,都會使用經過這個回調函數的處理。

第2種情況是針對于這個路由下的指定的地址,才會觸發回調函數的處理。

以下上干貨:

?

?
  1. var express = require("express");

  2. var app = express();

  3. var router = express.Router();

  4. router.use(function(req, res, next) {

  5. console.log('%s %s %s', req.method, req.url, req.path);

  6. next();

  7. });

  8. ?
  9. ?
  10. router.use(express.static(__dirname + "/bar"), function(req, res, next) {

  11. next();

  12. });

  13. ?
  14. ?
  15. router.use(function(req, res) {

  16. res.send("Hello world");

  17. });

  18. ?
  19. ?
  20. app.use('/foo', router);

  21. ?
  22. ?
  23. app.listen(3000);

?

?

因為在app.use中已經制定了父級目錄的地址,所以router只需要針對自己目錄進行處理即可。

?

?

?

?

本文涉及的學習資源來源于

http://expressjs.com/en/4x/api.html#router.METHOD

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248947.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rest測試定義

1.為什么要做接口測試: 1.因為很多系統關聯都是基于接口實現的,接口測試可以將系統復雜的系統關聯進行簡化 2.接口工程比較單一,能夠比較好的進行測試覆蓋,也相對容易實現自動化持續集成 3.接口相對于界面功能 ,會更底…

團隊開發進度報告9

(1)站立會議 (2)任務面板 (3)具體內容 昨天:完成了界面控件按鈕的設置問題:PHP數據處理,如何實現在線數據交互問題今天:hbuilder后臺環境搭建 轉載于:https:/…

nodejs+express整合kindEditor實現圖片上傳 - 木子豐咪咕晶 - 開源中國

kindEditor官網上中提供了ASP,ASP.NET,JSP相關的整合應用,http://kindeditor.net/docs/upload.html可以參照實現nodejs的整合,發現實用nodejs更簡單 環境: unbuntu 14.10 nodejs 0.10.35 express 4.11.2 formidable 1.0.16 kindEditor 4.1.10 webStorm 8 1.通過IDE或終端創建…

基于springboot多模塊項目使用maven命令打成war包放到服務器上運行的問題

首先,大家看到這個問題,可能并不陌生,而且腦子里第一映像就是使用mava中的clear package 或者 clear install進行打包,然后在項目中的target文件夾下面找到xxx.war,將這個war包放到外置的tomcat服務器下的webapps下面&…

Kafka學習筆記(3)----Kafka的數據復制(Replica)與Failover

1. CAP理論 1.1 Cosistency(一致性) 通過某個節點的寫操作結果對后面通過其他節點的讀操作可見。 如果更新數據后,并發訪問的情況下可立即感知該更新,稱為強一致性 如果允許之后部分或全部感知不到該更新,稱為弱一致性。 若在之后的一段時間&…

H5頁面隨機數字鍵盤支付頁面

H5頁面隨機數字鍵盤支付頁面 有個H5支付的業務需要隨機數字的鍵盤 參考了下文:https://blog.csdn.net/Mr_Smile2014/article/details/52473351 做了一些小修改: 在原有的基礎上,增加了一些按鍵反饋的效果。 每個按鍵加上邊框。 最終效果&…

expressjs路由和Nodejs服務器端發送REST請求 - - ITeye博客

Nodejs創建自己的server后,我們如果需要從客戶端利用ajax調用別的服務器端的數據API的接口,這時候出現了ajax跨域問題。 一種是利用在客戶端解決跨域問題 這種方案大家可以去網上查查 另一種方案是在服務器端去請求別的服務器,然后將數據再…

Jmeter操作mysql數據庫測試

1. 選中線程組鼠標點擊右鍵添加-->配置元件-->JDBC Connection Configuration; 2. DataBase Connection Configuration配置 Variable Name:配置元件的的所有配置所保存的變量,自定義變量名稱(不能使用mysql作為變量名,多個…

axios發送自定義請求頭的跨域解決

前端發送來的axios請求信息 this.$axios.request({ url:http://127.0.0.1:8001/pay/shoppingcar/, method:post, headers:{ authenticate:a073b3dabbb140e8b9d28debb6a356a1 # 自定義的請求頭部信息鍵值對, }, # 接上,這種key也算是一種請求頭,需要加入django中間件內…

前端“智能”靜態資源管理 - Onebox - 博客園

前端“智能”靜態資源管理 模塊化/組件化開發,僅僅描述了一種開發理念,也可以認為是一種開發規范,倘若你認可這規范,對它的分治策略產生了共鳴,那我們就可以繼續聊聊它的具體實現了。 很明顯,模塊化/組件化…

【轉】幾張圖看懂列式存儲

幾張圖看懂列式存儲 轉載于:https://www.cnblogs.com/apeway/p/10870211.html

hive -e和hive -f的區別(轉)

大家都知道,hive -f 后面指定的是一個文件,然后文件里面直接寫sql,就可以運行hive的sql,hive -e 后面是直接用雙引號拼接hivesql,然后就可以執行命令。 但是,有這么一個東西,我的sql當中有一個s…

我們是如何做好前端工程化和靜態資源管理 - 無雄 - 博客園

我們是如何做好前端工程化和靜態資源管理 隨著互聯網的發展,我們的業務也日益變得更加復雜且多樣化起來,前端工程師也不再只是做簡單的頁面開發這么簡單,我們需要面對的十分復雜的系統性問題,例如,業務愈來愈復雜&…

Mybatis-plus之RowBounds實現分頁查詢

物理分頁和邏輯分頁 物理分頁:直接從數據庫中拿出我們需要的數據,例如在Mysql中使用limit。 邏輯分頁:從數據庫中拿出所有符合要求的數據,然后再從這些數據中拿到我們需要的分頁數據。 優缺點 物理分頁每次都要訪問數據庫&#xf…

常見的6種JavaScript設計模式

常見的6種JavaScript設計模式 構造函數模式 /*** 構造一個動物的函數 */ function Animal(name, color){this.name name;this.color color;this.getName function(){return this.name;} } // 實例一個對象 var cat new Animal(貓, 白色); console.log( cat.getName() );工…

峰度(Kurtosis)和偏度(Skewness)

峰度(Kurtosis) 定義峰度又稱峰態系數,表征概率密度分布曲線在平均值處峰值高低的特征數,即是描述總體中所有取值分布形態陡緩程度的統計量。直觀看來,峰度反映了峰部的尖度。這個統計量需要與正態分布相比較。 公式定…

1.27

測試程序提出問題并解決轉載于:https://www.cnblogs.com/JustinTimberlake/p/10028870.html

javascript設計模式系列 - LukeLin - 博客園

javascript設計模式系列 創建型: 1.抽象工廠模式(Abstract Factory) 2.構建者模式(Builder) 3.工廠方法模式(Factory Method) 4.原型模式(Prototype) 5.單例模式&a…

多功能嵌入式解碼軟件(2)

多功能嵌入式解碼軟件(2) 驗證類庫 通信協議 下面進行一個示例: 下位機需要向上位機發送3中數據幀,數據幀以功能碼來識別,每種數據幀的協議如下3個表格所示,上位機需要把這些數據按照協議解碼出來&#xff…

vue項目如何打包扔向服務器 - Hi-Sen - 博客園

當我們將 vue 項目完成后,面臨的就是如何將項目進行打包上線,放到服務器中。我使用的是 vue-cli(simple) 腳手架,所以就講一下如何將項目進行打包,并放到 tomcat 上。 如果是 vue-cli (非 simple 腳手架…