Node.js(三)之Express

Express

目錄

Express

九、初識Express

9.1 Express簡介

1. 什么是 Express

2. 進一步理解Express

3. Express能做什么

9.2 Express的基本使用

1. 安裝

2. 創建基本的Web服務器

3. 監聽GET請求

4. 監聽POST請求

5. 把內容響應給客戶端

6. 獲取URL中攜帶的查詢參數

7. 獲取URL中的動態參數

9.3 托管靜態資源

1. express.static()

2. 托管多個靜態資源目錄

3. 掛載路徑前綴

9.4 nodemon

1. 為什么要使用nodemon

2. 安裝nodemon

3. 使用nodemon

十、Express路由

10.1 路由的概念

1. 什么是路由

2. 現實生活中的路由

3. Express中的路由

4. Express中的路由的例子

5. 路由的匹配過程

10.2 路由的使用

1. 最簡單的用法

2. 模塊化路由

3. 創建路由模塊

4. 注冊路由模塊

5. 為路由模塊添加前綴

十一、Express中間件

11.1 中間件的概念

1. 什么是中間件

2. 現實生活的例子

3. Express中間件的調用流程

4. Express中間件的格式

5. next函數的作用

11.2 Express中間件的初體驗

1. 定義中間件函數

2. 全局生效的中間件

3. 定義全局中間件的簡化形式

4. 中間件的作用

5. 定義多個全局中間件

6. 局部生效的中間件

7. 定義多個局部中間件

8. 了解中間件的5個使用注意事項

11.3 中間件的分類

1. 應用級別的中間件

2. 路由級別的中間件

3. 錯誤級別的中間件

4. Express內置的中間件

5. 第三方的中間件

11.4 自定義中間件

1. 需求描述與實現步驟

2. 定義中間件

3. 監聽req的data事件

4. 監聽req的end事件

5. 使用querystring模塊解析請求體數據

6. 將解析出來的數據對象掛載為req.body

7. 將自定義中間件封裝為模塊

十二、使用Express寫接口

12.1 創建基本的服務器

12.2 創建API路由模塊

12.3 編寫GET接口

12.4 編寫POST接口

12.5 CORS跨域資源共享

1. 接口的跨域問題

2. 使用cors中間件解決跨域問題

3. 什么是CORS

4. CORS的注意事項

5. CORS響應頭部- Access-Control-Allow-Origin

6. CORS響應頭部 - Access-Control-Allow-Headers

7. CORS響應頭部- Access-Control-Allow-Methods

8. CORS請求的分類

9. 簡單請求

10. 預檢請求

11. 簡單請求和預檢請求的區別

12.6 JSONP接口

1. 回顧JSONP的概念與特點

2. 創建JSONP接口的注意事項

3. 實現JSONP接口的步驟

4. 實現JSONP接口的具體代碼

5. 在網頁中使用jQuery發起JSONP請求

九、初識Express

9.1 Express簡介

1. 什么是 Express

官方給出的概念:Express 是基于Node.js平臺快速、開放、極簡Web開發框架

通俗的理解:Express 的作用和Node.js內置的http模塊類似,是專門用來創建Web服務器的

Express的本質:就是一個npm上的第三方包,提供了快速創建Web服務器的便捷方法。

Express的中文官網:http://www.expressjs.com.cn/


 

2. 進一步理解Express

思考:不使用Express能否創建Web服務器?

答案:能,使用Node.js提供的原生http模塊即可。

思考:既生瑜何生亮(有了http內置模塊,為什么還有用Express) ?

答案:http內置模塊用起來很復雜,開發效率低;Express 是基于內置的http模塊進一步封裝出來的, 能夠極大的提高開發效率。

思考:http內置模塊與Express是什么關系?

答案:類似于瀏覽器中Web API和jQuery的關系。后者是基于前者進一步封裝出來的。
 

3. Express能做什么

對于前端程序員來說,最常見的兩種服務器,分別是:

  • Web 網站服務器:專門對外提供Web網頁資源的服務器。
  • API 接口服務器:專[ ]對外提供API接口的服務器。

使用Express,我們可以方便、快速的創建Web網站的服務器或API接口的服務器。
 

9.2 Express的基本使用

1. 安裝

在項目所處的目錄中,運行如下的終端命令,即可將 express 安裝到項目中使用:


 


2. 創建基本的Web服務器


3. 監聽GET請求

通過app.get()方法,可以監聽客戶端的GET請求,具體的語法格式如下:


 

4. 監聽POST請求

通過app.post()方法,可以監聽客戶端的POST請求,具體的語法格式如下:


5. 把內容響應給客戶端

通過res.send()方法,可以把處理好的內容,發送給客戶端:


 


6. 獲取URL中攜帶的查詢參數

通過req.query對象,可以訪問到客戶端通過查詢字符串的形式,發送到服務器的參數:



7. 獲取URL中的動態參數

通過 req.params 對象,可以訪問到URL中,通過 : 匹配到的動態參數


 



9.3 托管靜態資源

1. express.static()

express提供了一個非常好用的函數,叫做express static(),通過它,我們可以非常方便地創建一個靜態資源服務器,例如,通過如下代碼就可以將public目錄下的圖片、CSS文件、JavaScript 文件對外開放訪問了:


 

現在,你就可以訪問public目錄中的所有文件了:

http://localhost:3000/images/bg.jpg

http://localhost:3000/css/ style.css

http://localhost:3000/js/login.js

注意:Express 在指定的靜態目錄中查找文件,并對外提供資源的訪問路徑。因此,存放靜態文件的目錄名不會出現在URL中。


2. 托管多個靜態資源目錄

如果要托管多個靜態資源目錄,請多次調用express.static() 函數:



 

訪問靜態資源文件時,express.static() 函數會根據目錄的添加順序查找所需的文件。如果第一個文件夾找到了,則不會找第二個文件夾。




3. 掛載路徑前綴

如果希望在托管的靜態資源訪問路徑之前,掛載路徑前綴,則可以使用如下的方式:


 

現在,你就可以通過帶有 /public 前綴地址來訪問public目錄中的文件了:

http://localhost:3000/public/images/kitten.jpg

http://localhost:3000/public/css/style.css

http://localhost:3000/public/js/app.js



 


9.4 nodemon

1. 為什么要使用nodemon

在編寫調試Node.js項目的時候,如果修改了項目的代碼,則需要頻繁的手動close掉,然后再重新啟動,非常繁瑣。

現在,我們可以使用nodemon (https://www.npmjs.com/package/nodemon) 這個工具,它能夠監聽項目文件的變動,當代碼被修改后,nodemon會自動幫我們重啟項目,極大方便了開發和調試。
 

2. 安裝nodemon

在終端中,運行如下命令,即可將nodemon安裝為全局可用的工具:


 


3. 使用nodemon

當基于 Node.js 編寫了一個網站應用的時候,傳統的方式,是運行 node app.js 命令,來啟動項目。這樣做的壞處是:代碼被修改之后,需要手動重啟項目。

現在,我們可以將node命令替換為 nodemon 命令,使用 nodemon app.js 來啟動項目。這樣做的好處是:代碼被修改之后,會被nodemon監聽到,從而實現自動重啟項目的效果。


 

十、Express路由

10.1 路由的概念

1. 什么是路由

廣義上來講,路由就是映射關系

2. 現實生活中的路由

在這里,路由是按鍵服務之間的映射關系

3. Express中的路由

在Express中,路由指的是客戶端的請求服務器處理函數之間的映射關系

Express中的路由分3部分組成,分別是請求的類型、請求的URL地址、處理函數,格式如下:


 

4. Express中的路由的例子

5. 路由的匹配過程

每當一個請求到達服務器之后,需要先經過路由的匹配,只有匹配成功之后,才會調用對應的處理函數。

在匹配時,會按照路由的順序進行匹配,如果請求類型請求的URL同時匹配成功,則Express會將這次請求,轉交給對應的function函數進行處理。


 

路由匹配的注意點:

①按照定義的先后順序進行匹配

②請求類型請求的URL同時匹配成功,才會調用對應的處理函數
 

10.2 路由的使用

1. 最簡單的用法

在Express中使用路由最簡單的方式,就是把路由掛載到app上,示例代碼如下:

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

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

相關文章

IKAnalyzer分詞插件使用方法

前言 隨著越來越多的大數據網站崛起,特別是一些私人網站都提供了站內搜索,有些人會用elastsearch來實現站內搜索的目的,但是一些小站并沒有那么大的數據提供搜索,在安裝一個 elastsearch 服務未免有點浪費? 因此&#…

ESB 在零售,物流,制造,保險,醫療行業的應用方式

企業服務總線(Enterprise Service Bus, ESB)是一種基于中間件的集成模式,用于實現不同系統之間的集成與通信。ESB通過標準化接口、消息路由、協議轉換和數據轉換等功能,幫助企業實現系統間的無縫對接,提高業務敏捷性。…

vcsa6.7-重置root密碼

客戶反饋vc無法登錄了,登錄環境一看,報錯如下首先想到是證書到期了,瀏覽器確認,確實是證書到期了準備ssh登錄才發現root密碼忘記了,那就先重置root密碼,1、登錄esxi主機找到vcsa6.7機器關機做快照2、開機到…

C++ 賦值與交換法則

在C中,賦值與交換法則(Assignment and Swap Idiom)通常指的是在實現類的賦值操作符(operator)時,結合拷貝構造和交換操作來確保強異常安全保證(Strong Exception Safety Guarantee)的…

Ambari中文漢化

Ambari-ZH 當前Ambari的漢化版本為2.7.4,漢化采用對該版本的ambari源碼直接修改的方式進行,如有翻譯不當之處,請批評指正 一、使用方法如下: 方式一:直接下載 下載地址:https://github.com/ukayunnuo/Ambari-2.7.x-zh/releases/download/…

表格之固定列和表頭

說明 利用粘性定位實現 列固定 td.fixed {position: sticky;left: 0;z-index: 5;/* 最好指定背景&#xff0c;否則滑動時會顯示下面的列 */background-color: #f8f9fa; }表頭固定 <head><style>.table-container {position: relative;display: flex;overflow: hidd…

React 圖標庫發布到 npm 倉庫

將搭建的 React 圖標庫發布到 npm 倉庫需要經過一系列步驟&#xff0c;包括配置 package.json、構建代碼、注冊 npm 賬號、測試和發布。以下是詳細流程&#xff1a; 1. 準備工作 (1) 確保項目結構完整 圖標庫的典型結構&#xff08;以 Rollup 構建為例&#xff09;&#xff1…

Java學習第八十四部分——HttpClient

目錄 一、前言介紹 二、主要特點 三、功能用法 四、應用場景 五、最佳實踐 六、總結歸納 一、前言介紹 HttpClient 是一個用于發送 HTTP 請求和接收 HTTP 響應的客戶端庫&#xff0c;廣泛應用于 Web 開發、API 調用、微服務通信等場景。 二、主要特點 支持多種HTTP方…

學習筆記-中華心法問答系統的性能提升

1.簡介本周主要任務是自行查找文獻&#xff0c;針對源代碼進行性能提升&#xff0c;主要包括三個方面&#xff1a;預處理&#xff1a;分詞、關鍵詞提取、詞向量生成&#xff1b;文本分析&#xff1a;從多個關鍵詞的詞向量&#xff0c;如何到一句話的語義理解&#xff1b;問題分…

Python爬蟲03_Requests破解百度翻譯

爬取百度翻譯頁面信息 以POST方法發送JSON數據&#xff0c;爬取響應信息&#xff0c;并且需要對響應信息對象類型進行區分。 import requests import json#1.指定url post_url https://fanyi.baidu.com/sug#2.進行UA封裝 headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; …

【C++進階】第8課—紅黑樹封裝map和set

文章目錄1. map和set的源碼及框架分析2. 模擬實現map和set2.1 實現可以復用紅黑樹的框架&#xff0c;支持insert操作2.2 實現迭代器iterator2.2.1 實現迭代器2.2.2 實現迭代器 - -2.2.3 解決key不能修改的問題2.2.4 重載operator[ ]3. 完整代碼3.1 紅黑樹頭文件RBTree.h3.2 mym…

【機器學習深度學習】DeepSpeed框架:高效分布式訓練的開源利器

目錄 前言 一、DeepSpeed 簡介 1.1 定位與目標 1.2 集成生態 二、核心技術解析 2.1 ZeRO&#xff08;Zero Redundancy Optimizer&#xff09; 2.2 顯存優化技術 2.3 推理優化與通信機制 三、DeepSpeed 的優勢與特性總結 四、 典型應用場景 &#x1f9e0; 大模型訓練…

從視覺到現實:掌握計算機視覺技術學習路線的十大步驟

成長路上不孤單&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;【14后&#x1f60a;///計算機愛好者&#x1f60a;///持續分享所學&#x1f60a;///如有需要歡迎收藏轉發///&#x1f60a;】今日分享關于計算機視覺技術學習路線方面的相關內容…

DeepSeek MoE 技術解析:模型架構、通信優化與負載均衡

1. MoE 簡介 MoE&#xff08;Mixed Expert Models&#xff09;&#xff0c;混合專家模型。在 Transformer 的 FFN 中&#xff0c;有一個重要的觀察是&#xff0c;其計算過程中的神經元激活是非常稀疏的&#xff0c;在一次計算中只有 90%的輸入激活不到 5%的神經元&#xff0c;…

【Linux】pthread學習筆記

1. 線程基礎(1) 線程創建與終止#include <pthread.h> // 創建線程 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void*), void *arg); // 終止當前線程 void pthread_exit(void *retval); // 等待線程結束 int pthread_joi…

p5.js 從零開始創建 3D 模型,createModel入門指南

點贊 關注 收藏 學會了 如果你已經開始探索 p5.js 的 3D 世界&#xff0c;那么createModel()這個 API 絕對是你需要掌握的強大工具。它允許你創建自定義的 3D 幾何模型&#xff0c;為你的創意提供無限可能。 什么是 createModel ()&#xff1f; createModel() 用于從一個…

react 的 useTransition 、useDeferredValue

useTransition 用于 管理狀態更新的過渡&#xff08;pending&#xff09;狀態&#xff0c;避免因高優先級任務&#xff08;如用戶輸入&#xff09;被低優先級任務&#xff08;如數據獲取或復雜計算&#xff09;阻塞而導致的界面卡頓。 它特別適用于&#xff0c;需要 區分緊急更…

Unity的GameObject.Instantiate的使用

在Unity游戲引擎中&#xff0c;GameObject.Instantiate 是一個核心方法&#xff0c;用于在運行時動態創建游戲對象的副本。它常用于實例化預制體&#xff08;Prefab&#xff09;&#xff0c;例如生成敵人、子彈或場景元素。以下是其使用方法的詳細說明&#xff0c;包括語法、參…

【CSS】盒子類型

CSS盒子模型是網頁布局的核心基礎&#xff0c;每個HTML元素都被視為一個矩形盒子&#xff0c;由??內容&#xff08;Content&#xff09;、內邊距&#xff08;Padding&#xff09;、邊框&#xff08;Border&#xff09;、外邊距&#xff08;Margin&#xff09;??四部分組成。…

《嵌入式C語言筆記(十五):字符串操作與多維指針深度解析》

1.字符串與指針安全操作核心函數與陷阱函數功能安全替代功能strcpy字符串拷貝strncpy復制前n個&#xff0c;最多strlen個&#xff0c;超出有效長度&#xff0c;按原樣復制strcat字符串拼接strncatdest只連接src的前n個&#xff0c;如果n超過有效長度&#xff0c;按原樣鏈接strc…