搜尋
首頁web前端js教程深入淺析node.js中的express路由

這篇文章帶大家了解一下node中的express路由,介紹一下基本使用方法,希望對大家有幫助!

深入淺析node.js中的express路由

1. 路由的概念

1.1 什麼是路由

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

在現實生活中

深入淺析node.js中的express路由

按键 1  ->  业务查询
按键 2  ->  手机充值
按键 3  ->  业务办理
按键 4  ->  密码服务与停复机
按键 5  ->  家庭宽带
按键 6  ->  话费流量
按键 8  ->  集团业务
按键 0  ->  人工服务

在这里,路由是按键与服务之间的映射关系

1.2 nodejs中的路由

nodejs中的路由其實就是url位址和回應函數之間的映射關係,一個url位址回應一個html頁面。

就是將一個路徑匹配關係的業務提取到一個單獨的js檔案當中.

2. Express

2.1 Express 簡介

基於Node.js 平台,快速、開放、極簡的web 開發框架

  • express 官網(http ://expressjs.com/)
  • express 中文網(http://expressjs.com.cn/)

1. Express 的作用和Node.js內建的http 模組類似,是專門用來建立Web 伺服器的。
2. Express 的本質:就是一個 npm 上的第三方包,提供了快速建立 Web 伺服器的便捷方法。

進一步了解express

思考:不使用 Express 能否建立 Web 伺服器?
答案:能,使用 Node.js 提供的原生 http 模組即可。

思考:既生瑜何生亮(有了 http 內建模組,為什麼還有用 Express)?
答案:http 內建模組用起來很複雜,開發效率低;Express 是基於內建的 http 模組進一步封裝出來的,能夠極大的提高開發效率。

思考:http 內建模組與 Express 是什麼關係?
答案:類似瀏覽器中 Web API 和 jQuery 的關係。後者是基於前者進一步封裝出來的。

2.2 基本上使用步驟

  • #安裝:npm i express
// 导入 express
var express = require('express');
// 创建 express实例,也就是创建 express服务器
var app = express();


// 启动服务器
app.listen(3000, function () {
  console.log('服务器已启动')
})

監聽get請求

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wu5WkyIV-1639963661922)(images3/image-2020052923160665深入淺析node.js中的express路由)]

監聽post請求

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wzB8FFER-1639963661923)(images3/image-20200529231710830.png)]

響應內容給客戶端

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

[外鏈圖片轉存失敗,來源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Iiifw7XV-1639963661924)(images3/image-20200529231837638.png)]

2.3 req屬性詳解

##2.3 req屬性詳解

#取得get請求的參數

透過req.query 對象,可以取得到客戶端透過GET方式,傳送到伺服器的參數:例如: http://127.0.0.1:3000/index?id=10&name=tom&age=20名稱作用req.query取得Get請求傳遞過來的參數,拿到的是一個物件##req.body取得Get請求中的路由參數,取得的是一個物件範例:jd.com/32342545365req.get(key)
[外鏈圖片轉存失敗,來源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img -WUoF7b2h-1639963661925)(images3/image-20200529231928577.png)]
取得Post請求傳遞過來的數據,拿到的是一個對象,需要註冊一個中間件

#req.params
app.get('/product/:id')
取得請示頭中指定Key對應的Value#############

获取post请求的参数

通过req.body可以获取post请求的参数,但是需要配合body-parser中间件

不再需要使用req.on(‘data’,chunk=>{})         req.on(‘end’,()=>{})

如果没有这个中间件的话,则默认获取的是undefined.

// 最新的express版本,不再需要body-parse的下载支持了,直接按如下的方式来书写即可 
app.use(express.urlencoded({ extended: true }))
app.post('/index',(req,res)=>{
  console.log(req.body);
})

2.4 res属性详解

// send() 发送数据给客户端,并自动设置Content-Type
res.send()  //用于向浏览器客户端响应数据 会自带合适的响应头

// 发送文件给浏览器,并根据文件后缀名自动设置Content-Type
// 注意:文件路径必须是绝对路径
res.sendFile(path.join(__dirname, 'index.html'))

// 设置响应头
res.set('Content-Type', 'text/plain')
res.set({
  'Content-Type': 'text/plain',
  'cute': 'fangfang'
})

// 重定向 
res.redirect('/index')
方法 作用
res.send() 响应给客户端浏览器的数据,会自带响应头
send方法在将上面的对象数据响应给浏览器的时候,相当于内部会调用 JSON.stringify()
res.sendFile(path) 响应给浏览器一个页面
res.redirect() 重定向 会自带状态码
res.set(key,value) 自定义响应头
res.status() 设置响应状态码

2.5 express路由处理

基本使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D3rId34r-1639963661925)(images3/image-20200529233016669.png)]

  • app.get(path, callback)
  • app.post(path, callback)
  • app.use(path, callback) 更重要的作用是处理中间件
    • 注意:只要是以path开头的请求地址,都可以被use处理
    • 注意:可以处理任意的请求类型
    • 注意:path参数可省略,默认值为:/
// all可以匹配任何提交方式 get和post都可以
app.all('*',(req,res)=>{
 // 做一个其它比较友好界面 响应给浏览器
  res.send('页面还没完成,请等待...')
})

路由的匹配过程

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。

在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的 URL 同时匹配成功,则 Express 会将这次请求,转交给对应的 function 函数进行处理。

深入淺析node.js中的express路由

路由匹配的注意点:

①按照定义的先后顺序进行匹配

②请求类型和请求的URL同时匹配成功,才会调用对应的处理函数

全局挂载路由

在 Express 中使用路由最简单的方式,就是把路由挂载到 app 上,示例代码如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pdjsILgz-1639963661927)(images3/image-2020052923325460深入淺析node.js中的express路由)]

2.6 模块化路由

        为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块。

将路由抽离为单独模块的步骤如下:

①创建路由模块对应的 .js 文件 router.js

②调用 express.Router() 函数创建路由对象

③向路由对象上挂载具体的路由

④使用 module.exports 向外共享路由对象

⑤使用 app.use() 函数注册路由模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fEDx0H3-1639963661928)(images3/image-2020052923332450深入淺析node.js中的express路由)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAUKjV4x-1639963661931)(images3/image-20200529233330060.png)]

2.7 静态资源处理

基本使用

express 提供了一个非常好用的函数,叫做 express.static(),通过它,我们可以非常方便地创建一个静态资源服务器,例如,通过如下代码就可以将 public 目录下的图片CSS 文件、**JavaScript **文件对外开放访问了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C1BTBqzr-1639963661933)(images3/image-2020052923240715深入淺析node.js中的express路由)]

现在,你就可以访问 public 目录中的所有文件了:
http://localhost:3000/images/bg.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/login.js

注意:Express 在指定的静态目录中查找文件,并对外提供资源的访问路径。
因此,存放静态文件的目录名不会出现在 URL 中。

托管多个资源目录

如果要托管多个静态资源目录,请多次调用 express.static() 函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Px6ZUuaQ-1639963661934)(images3/image-20200529232555610.png)]

上面的设置需要注意的是:在html页面中的那些静态资源路径一定不要在出现public

访问静态资源文件时,express.static() 函数会根据目录的添加顺序查找所需的文件。

挂载路径前缀

如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下的方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e13liOYs-1639963661934)(images3/image-2020052923262669深入淺析node.js中的express路由)]

现在,你就可以通过带有 /public 前缀地址来访问 public 目录中的文件了:
http://localhost:3000/public/images/kitten.jpg
http://localhost:3000/public/css/style.css
http://localhost:3000/public/js/app.js

2.8 express中间件

什么是中间件

中间件(Middleware )其实就是一个函数,特指业务流程的中间处理环节。

分为全局中间件和路由中间件。

中间件分为两种 一个是全局中间件 一个是路由中间件

现实生活中的例子

深入淺析node.js中的express路由

处理污水的这中间处理环节,就可以叫做中间件。

express中的中间件

当一个请求到达 Express 的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理。

深入淺析node.js中的express路由

基本使用

Express 的中间件,本质上就是一个 function 处理函数,Express 中间件的格式如下:

const mw = function(req, res, next) {
  next()
}
app.use(mw)

注意:中间件函数的形参列表中,必须包含 next 参数。而路由处理函数中只包含 req 和 res。

next函数的作用: next 函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。

深入淺析node.js中的express路由

中间件的作用

多个中间件之间,共享同一份 req res。基于这样的特性,我们可以在上游的中间件中,统一为 req 或 res 对象添加自定义的属性或方法,供下游的中间件或路由进行使用。

深入淺析node.js中的express路由

定义多个中间件

可以使用 app.use() 连续定义多个全局中间件。客户端请求到达服务器之后,会按照中间件定义的先后顺序依次进行调用,示例代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5pYXD4F-1639963661937)(images3/image-2020052923390169深入淺析node.js中的express路由)]

express内置中间件

自 Express 4.16.0 版本开始,Express 内置了 3 个常用的中间件,极大的提高了 Express 项目的开发效率和体验:

① express.static 快速托管静态资源的内置中间件,例如: HTML 文件、图片、CSS 样式等(无兼容性)

② express.json 解析 JSON 格式的请求体数据(有兼容性,仅在 4.16.0+ 版本中可用)

③ express.urlencoded 解析 URL-encoded 格式的请求体数据(有兼容性,仅在 4.16.0+ 版本中可用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WJaSINca-1639963661937)(images3/image-20200529234155137.png)]

3.EJS模板

3.1 ejs介绍

ejs是一个高效的javascript模板引擎,是为了使用户页面与业务数据(分离)而产生的。

简单来说,使用ejs模板引擎就可以帮助我们快速的将数据渲染到页面对应的位置,和art-template模板类似.

3.2 ejs的使用

1.下载

npm i ejs

2.配置模板引擎

app.set('view engine','ejs')

3.配置模板的存放目录

app.set('views','./views')   //默认的是可以省略

4.在views目录下创建模板文件    views文件夹中的静态页面此时应该修改后缀.ejs

5.使用模板渲染数据

res.render('index',obj)
//第一个参数就是要渲染的页面,直接写名称不用加后缀
//第二个参数表示待渲染的对象,通常是一个对象

3.3 数据渲染

     写业务逻辑

   在某位置输出数据

    不转义输出

更多node相关知识,请访问:nodejs 教程!!

以上是深入淺析node.js中的express路由的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。