NodeJS入門04-Express路由和中間件 - 小之 - 博客園

nodeJS入門04-Express路由和中間件

Express框架是后臺的Node框架,在后臺的受歡迎的程度,和jQuery一樣,就是企業的事實上的標準。

路由

路由是指如何定義應用的端點(URIs)以及如何響應客戶端的請求。

路由是由一個 URI、HTTP 請求(GET、POST等)和若干個句柄組成,它的結構如下:

復制代碼

app.method(path, [callback...], callback)/*
app:express 對象的一個實例
method: HTTP 請求方法
path:服務器上的路徑
callback:當路由匹配時要執行的函數
*/

復制代碼

一個簡單的路由實例:

復制代碼

var express=require("express");
var app=express();
app.get("/",function (req,res) {res.send("hello world")
});app.listen(3000);

復制代碼

運行結果:

路由方法

復制代碼

//當用get請求訪問一個網址的時候,做什么事情: 
app.get("網址",function(req,res){});//當用post訪問一個網址的時候,做什么事情:
app.post("網址",function(req,res){});//如果想處理這個網址的任何method的請求,那么寫all
app.all("/",function(){});

復制代碼

注意:

  • 這里的網址,不分大小寫
  • 所有的GET參數,? 后面的都已經被忽略。 錨點#也被忽略。你路由到/a , 實際/a?id=2&sex=nan 也能被處理。

路由路徑

路由路徑和請求方法一起定義了請求的端點,它可以是字符串、字符串模式或者正則表達式。

復制代碼

// 匹配根路徑的請求
app.get('/', function (req, res) {res.send('root');
});// 匹配 /about 路徑的請求
app.get('/about', function (req, res) {res.send('about');
});//匹配student的學號
app.get(/^\/student\/([\d]{10})$/,function(req,res){res.send("學生信息,學號" + req.params[0]);
});

復制代碼

跟正則相比,我們更推薦使用冒號的方式來進行匹配,如下實例:

復制代碼

app.get("/student/:id",function(req,res){var id = req.params["id"];var reg= /^[\d]{6}$/;   //正則驗證if(reg.test(id)){res.send(id);}else{res.send("請檢查格式");}
});

復制代碼

?中間件

Express 是一個自身功能極簡,完全是由路由和中間件構成一個的 web 開發框架:從本質上來說,一個 Express 應用就是在調用各種中間件。

中間件(Middleware)?是一個函數,它可以訪問請求對象(request object?(req)), 響應對象(response object?(res)), 和next?的變量。

路由get、post這些東西,就是中間件,中間件講究順序,匹配上第一個之后,就不會往后匹配了。next函數才能夠繼續往后匹配。如下實例:

復制代碼

app.get("/",function(req,res,next){console.log("1");next();
});app.get("/",function(req,res){console.log("2");
});

復制代碼

?

app.use()也是一個中間件。與get、post不同的是,他的網址不是精確匹配的。而是能夠有小文件夾拓展的。

比如網址:? http://127.0.0.1:3000/admin/aa/bb/cc/dd

app.use("/admin",function(req,res){ res.write(req.originalUrl + "\n");   //    /admin/aa/bb/cc/ddres.write(req.baseUrl + "\n");  //   /adminres.write(req.path + "\n");   //    /aa/bb/cc/ddres.end("你好");
});

//當你不寫路徑的時候,實際上就相當于"/",就是所有網址

app.use(function(req,res,next){console.log(new Date());next();
});

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

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

相關文章

jmeter(四十五)常用Beanshell腳本

整理了一批jmeter常用的beanshell腳本供大家參考! 時間戳 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; try{ Date date new Date(); //獲取當前時間 SimpleDateFormat sf new SimpleDateFormat("yyyy-MM-dd HH:mm…

Critical error detected c0000374

我發現出現上述錯誤是 free 兩次內存 float* ddnew float[2];delete[] dd;delete[] dd;轉載于:https://www.cnblogs.com/hook-gou/p/9994662.html

nodejs開發 過程中express路由與中間件的理解 - pyj063 - 博客園

nodejs開發 過程中express路由與中間件的理解 nodejs開發 express路由與中間件 路由 通常HTTP URL的格式是這樣的: http://host[:port][path] http表示協議。 host表示主機。 port為端口,可選字段,不提供時默認為80。 path指定請求資源的…

錯誤MSB4018 “ResolvePackageAssets”任務意外失敗的解決方法

昨天系統奔潰了,重裝系統后發現,之前寫的.netcore項目打開后重新生成報錯,錯誤如下嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態 錯誤 MSB4018 “ResolvePackageAssets”任務意外失敗。 NuGet.Packaging.Core.Packag…

(五)Unity插件生成

1)新建空的AndroidStudio工程,但是新建過程時最小SDK版本要與unity一致,如下圖所示,本次操作均為api16 2)創建Library,如下圖所示,新建module,然后選擇Android Library。 新建模塊為…

centeros7安裝mysql - 風中追風_lonely - 博客園

轉載自:https://www.linuxidc.com/Linux/2016-09/135288.htm 安裝之前先安裝基本環境:yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs 1、配置YUM源 在MySQL官網中下載YUM源rpm安裝包:http://dev.mysql.c…

失物招領平臺6

昨天做了什么:學習了復選框、列表視圖、網絡視圖,集體討論了登錄頁面的構思 今天準備做什么:繼續學習Android stdio,改善登錄頁面 遇到的問題:時間遠遠不夠。轉載于:https://www.cnblogs.com/sljslj/p/11056074.html

前后端交互json字符串

//將需要的參數轉成json字符串,然后用utf-8編碼 var obj encodeURIComponent(JSON.stringify(this.categories),"utf-8") //后臺將前臺的json字符串按照utf-8的格式解碼,然后進行轉換 RequestMapping(value "/updateMaterialDemoInfo.d…

CSS布局解決方案(終結版)

前端布局非常重要的一環就是頁面框架的搭建,也是最基礎的一環。在頁面框架的搭建之中,又有居中布局、多列布局以及全局布局,今天我們就來總結總結前端干貨中的CSS布局。 居中布局 水平居中 1)使用inline-blocktext-align &…

個人作業7 第一階段SCRUM沖刺(七)

了解了一下云服務器,下載了阿里云。 然而搞了半天還是沒應用上這個云服務器..轉載于:https://www.cnblogs.com/jbwen/p/11071733.html

Dcloud HTML5 監聽藍牙設備 調用 原生安卓實現 - aspirant - 博客園

最近一直搞Dcloud ,這是HTML5版本的開發,打包時候,可以打包成 apk 和ipa 分別運行在安卓和ios 機器上面, 但是這里面的資料很少,遇到問題,之后只能自己鉆研總結, 現在有這么一個需求&#xff…

NOIP2018游記

NOIP 2018 游記 又是一年 \(NOIP\) 呢...第二次參加了,希望這一次能不再擦線吧...畢竟我真的很想去 \(WC\) ,也很想去省選. 最后悔的事就是在初三了,恰逢直升,大好年華,停課學 \(OI\) ,但我竟然在某兩位 \(dalao\) 帶領下搓了一年 爐石 \(\& \: SC2\) ?&#xf…

四葉草社交平臺——十天沖刺(5)

今天沒能安排好各種的任務,姑且拍了張照片就散了。 我的任務就是把登錄功能完成,先讓其他人把資源載入問題解決了,然后我再看看動態如何發送。 轉載于:https://www.cnblogs.com/limitCM/p/10925161.html

Django forms組件

校驗字段 模板文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form action"" method"post"><p>用戶名: <…

為什么要用TypeScript - 肉豬 - 博客園

為什么要用TypeScript 以下是本人的一點拙見&#xff0c;歡迎指正。 TypeScript的設計目的應該是解決JavaScript的“痛點”&#xff1a;弱類型和沒有命名空間&#xff0c;導致很難模塊化&#xff0c;不適合開發大型程序。另外它還提供了一些語法糖來幫助大家更方便地實踐面向…

java繼承上機作業

實現如下類之間的繼承關系&#xff0c;并編寫Music類來測試這些類。 1 package su;2 3 class Instrument{4 public void play() {5 System.out.println("彈奏樂器");6 }7 8 public void play2() {9 // TODO 自動生成的方法存根 10 …

自定義標簽的作用

1&#xff09;控制標簽體內容是否輸出 2&#xff09;控制標簽余下內容是否輸出 3&#xff09;控制重復輸出標簽體內容 4&#xff09;改變標簽體內容 5&#xff09;帶屬性的標簽 package com.loaderman.demo.a_tag;import java.io.IOException; import java.io.StringWriter;imp…

前端之模擬數據 - HackerVirus - 博客園

閱讀目錄 玩轉前端之模擬數據 回到目錄 玩轉前端之模擬數據 博客園主頁&#xff1a;http://www.cnblogs.com/handoing/ 是否還在為前端模擬數據頭疼&#xff1f; 是否還在為后端返回數據格式較多內心煩躁&#xff1f; 是否還想吸一支煙壓壓精&#xff1f; 看下去吧&#x…

Leetcode No.146 ****

運用你所掌握的數據結構&#xff0c;設計和實現一個 LRU (最近最少使用) 緩存機制。它應該支持以下操作&#xff1a; 獲取數據 get 和 寫入數據 put 。 獲取數據 get(key) - 如果密鑰 (key) 存在于緩存中&#xff0c;則獲取密鑰的值&#xff08;總是正數&#xff09;&#xff…

三元運算符運算(Day02)

三元運算符運算(Day02) 運算符&#xff1a;用來對常量或者變量連接的符號&#xff0c;稱為運算符。表達式&#xff1a;用運算符連接起來的整個式子成為表達式。比如&#xff1a;a10,1020運算符有以下五種&#xff1a;1、算術運算符2、賦值運算符3、關系運算符4、邏輯運算符5、三…