express框架使用

一、express介紹

express 是一個基于 Node.js 平臺的極簡、靈活的 WEB 應用開發框架,簡單來說,express 是一個封裝好的工具包,封裝了很多功能,便于我們開發 WEB 應用(HTTP 服務)

二、express 使用

2.1 express 下載

express 本身是一個 npm 包,所以可以通過 npm 安裝

npm init
npm i express

2.2 express 初體驗

搭建express框架基本步驟如下:

? ? ? ?1.創建 JS 文件,鍵入如下代碼

const express = require('express')//創建express對象
const app = express();app.get('/home',(req,res)=>{res.end('hello express')
})//監聽
app.listen(9000,()=>{console.log('端口已啟動。。。')
})

? ? ? 2.命令行下執行該腳本

node <文件名>
# 或者
nodemon <文件名>

? ? ? 3.然后在瀏覽器就可以訪問 http://127.0.0.1:3000/home?

三、express 路由

3.1 什么是路由

官方定義: 路由確定了應用程序如何響應客戶端對特定端點的請求?

3.2 路由的使用?

?一個路由的組成有 請求方法 , 路徑 和 回調函數 組成

express 中提供了一系列方法,可以很方便的使用路由,使用格式如下:

app.<method>(path,callback)

示例代碼

const express = require('express')//創建express對象
const app = express();
//get路由
app.get('/home',(req,res)=>{res.end('hello express')
})
//首頁路由
app.get('/home',(req,res)=>{res.end('hello express')
})//post路由
app.post('/login',(req,res)=>{res.end('login')
})
//無論請求是什么方法,只要符合路徑就會返回結果  匹配所有方法
app.all('/test',(req,res)=>{res.end('test  test')
})//匹配404
app.all('*',(req,res)=>{res.end('404 not found')
})//監聽
app.listen(9000,()=>{console.log('端口已啟動。。。')
})

3.3 獲取請求參數

express 框架封裝了一些 API 來方便獲取請求報文中的數據,并且兼容原生 HTTP 模塊的獲取方式

//導入 express
const express = require('express');
//創建應用對象
const app = express();
//獲取請求的路由規則
app.get('/request', (req, res) => {//1. 獲取報文的方式與原生 HTTP 獲取方式是兼容的console.log(req.method);console.log(req.url);console.log(req.httpVersion);console.log(req.headers);//2. express 獨有的獲取報文的方式//獲取查詢字符串console.log(req.query); // 『相對重要』// 獲取指定的請求頭console.log(req.get('host'));res.send('請求報文的獲取');
});
//啟動服務
app.listen(3000, () => {console.log('啟動成功....')
})

3.4 獲取路由參數

路由參數指的是 URL 路徑中的參數(數據)

app.get('/:id.html', (req, res) => {res.send('商品詳情, 商品 id 為' + req.params.id);
});

四、express 響應設置

express 框架封裝了一些 API 來方便給客戶端響應數據,并且兼容原生 HTTP 模塊的獲取方式

app.get("/response", (req, res) => {//1. express 中設置響應的方式兼容 HTTP 模塊的方式res.statusCode = 404;res.statusMessage = 'xxx';res.setHeader('abc', 'xyz');res.write('響應體');res.end('xxx');//2. express 的響應方法res.status(500); //設置響應狀態碼res.set('xxx', 'yyy'); //設置響應頭res.send('中文響應不亂碼'); //設置響應體//連貫操作res.status(404).set('xxx', 'yyy').send('你好朋友')//3. 其他響應res.redirect('http://atguigu.com') //重定向res.download('./package.json'); //下載響應res.json(); //響應 JSONres.sendFile(__dirname + '/home.html') //響應文件內容
});

五、express 中間件

5.1 什么是中間件

中間件(Middleware)本質是一個回調函數 中間件函數 可以像路由回調一樣訪問 請求對象(request) , 響應對象(response)

5.2 中間件的作用

中間件的作用 就是 使用函數封裝公共操作,簡化代碼

5.3 中間件的類型

  • 全局中間件
  • 路由中間件

5.3.1 定義全局中間件

每一個請求 到達服務端之后 都會執行全局中間件函數

聲明中間件函數

let recordMiddleware = function(request,response,next){//實現功能代碼//.....//執行next函數(當如果希望執行完中間件函數之后,仍然繼續執行路由中的回調函數,必須調用next)next();
}

應用中間件

app.use(recordMiddleware);

聲明時可以直接將匿名函數傳遞給 use

app.use(function (request, response, next) {console.log('定義第一個中間件');next();
})

5.3.2 多個全局中間件

express 允許使用 app.use() 定義多個全局中間件

app.use(function (request, response, next) {console.log('定義第一個中間件');next();
})
app.use(function (request, response, next) {console.log('定義第二個中間件');next();
})

5.3.3 定義路由中間件

如果 只需要對某一些路由進行功能封裝 ,則就需要路由中間件

調用格式如下:

app.get('/路徑',`中間件函數`,(request,response)=>{});
app.get('/路徑',`中間件函數1`,`中間件函數2`,(request,response)=>{});

?5.4 靜態資源中間件

express 內置處理靜態資源的中間件

//引入express框架
const express = require('express');
//創建服務對象
const app = express();
//靜態資源中間件的設置,將當前文件夾下的public目錄作為網站的根目錄
app.use(express.static('./public')); //當然這個目錄中都是一些靜態資源
//如果訪問的內容經常變化,還是需要設置路由
//但是,在這里有一個問題,如果public目錄下有index.html文件,單獨也有index.html的路由,
//則誰書寫在前,優先執行誰
app.get('/index.html', (request, response) => {respsonse.send('首頁');
});
//監聽端口
app.listen(3000, () => {console.log('3000 端口啟動....');
});

注意事項:

1. index.html 文件為默認打開的資源

2. 如果靜態資源與路由規則同時匹配,誰先匹配誰就響應

3. 路由響應動態資源,靜態資源中間件響應靜態資源

5.5 獲取請求體數據 body-parser

express 可以使用 body-parser 包處理請求體

第一步:安裝

npm i body-parser

第二步:導入 body-parser 包?

const bodyParser = require('body-parser');

?第三步:獲取中間件函數

//處理 querystring 格式的請求體
let urlParser = bodyParser.urlencoded({extended:false}));
//處理 JSON 格式的請求體
let jsonParser = bodyParser.json();

第四步:設置路由中間件,然后使用 request.body 來獲取請求體數據

app.post('/login', urlParser, (request,response)=>{//獲取請求體數據//console.log(request.body);//用戶名console.log(request.body.username);//密碼console.log(request.body.userpass);response.send('獲取請求體數據');
});

六、Router

6.1 什么是 Router

express 中的 Router 是一個完整的中間件和路由系統,可以看做是一個小型的 app 對象。

6.2 Router 作用

對路由進行模塊化,更好的管理路由

6.3 Router 使用

創建獨立的 JS 文件(homeRouter.js)

//1. 導入 express
const express = require('express');
//2. 創建路由器對象
const router = express.Router();
//3. 在 router 對象身上添加路由
router.get('/', (req, res) => {res.send('首頁');
})
router.get('/cart', (req, res) => {res.send('購物車');
});
//4. 暴露
module.exports = router;

主文件

const express = require('express');
const app = express();
//5.引入子路由文件
const homeRouter = require('./routes/homeRouter');
//6.設置和使用中間件
app.use(homeRouter);
app.listen(3000,()=>{console.log('3000 端口啟動....');
})

七、EJS 模板引擎

7.1 什么是模板引擎

模板引擎是分離 用戶界面和業務數據 的一種技術

7.2 什么是 EJS

EJS 是一個高效的 Ja

vascript 的模板引擎?

7.3 EJS 初體驗

下載安裝EJS

npm i ejs --save

示例代碼

//1.引入ejs
const ejs = require('ejs');
//2.定義數據
let person = ['張三','李四','王二麻子'];
//3.ejs解析模板返回結構
//<%= %> 是ejs解析內容的標記,作用是輸出當前表達式的執行結構
let html = ejs.render(‘<%= person.join(",") %>’, {person:person});
//4.輸出結果
console.log(html);

7.4 EJS 常用語法

執行JS代碼

<% code %>

輸出轉義的數據到模板上

<%= code %>

?輸出非轉義的數據到模板上

<%- code %>

?

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

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

相關文章

【組合數學】遞推關系

目錄 1. 遞推關系建立2. 常系數齊次遞推關系的求解3. 常系數非齊次遞推關系的求解4. 迭代法 1. 遞推關系建立 給定一個數的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整數 n 0 n_0 n0? &#xff…

datav-實現輪播表,使用updateRows方法-無縫銜接加載數據

前言 最近在做大屏需求的時候&#xff0c;遇到一個輪播數據的需求&#xff0c;查看datav文檔發現確實有這個組件 但這個組件只提供了一次加載輪播的例子&#xff0c;雖然提供了輪播加載數據updateRows方法 但是文檔并沒有觸發事件&#xff0c;比如輪播完數據觸發事件&#xf…

ESL電子標簽的真相:電子墨水屏沒墨水?

一說到電子墨水屏 你大概率會想到Kindle 如果你問是不是墨水做的 那這篇文章你就得好好看看了 在我們日常與客戶的溝通中 為數不多卻出乎意料地有好幾個以下對話↓ 在此辟謠 電子墨水屏里確實 沒 有 墨 水 那它是什么樣的原理&#xff1f;為什么越來越多顯示設備采用&…

Abp vNext在Docker部署并導出鏡像

Docker介紹 Docker 是一個開源的應用容器引擎&#xff0c;讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中&#xff0c;然后發布到任何流行的 Linux或Windows操作系統的機器上&#xff0c;也可以實現虛擬化。容器是完全使用沙箱機制&#xff0c;相互之間不會有任何…

深度剖析中國居民消費價格指數CPI數據可視化案例-Python可視化技術實現(附完整源碼)【數據可視化項目案例-16】

?????? 你的技術旅程將在這里啟航! ???? 本專欄包括所有的可視化技術學習,感興趣可以到本專欄頁面,查閱可視化寶典可快速了解本專欄。訂閱專欄用戶可以在每篇文章底部下載對應案例源碼以供大家深入的學習研究。 ?? 每一個案例都會提供完整代碼和詳細的講解,不論…

Win11在Virtualbox上安裝ubuntu操作系統

注&#xff1a;原創筆記&#xff0c;以下圖片水印為本人 相關工具展示 第四個&#xff1a;ubuntu的vmdk文件&#xff0c;用于配置虛擬機 第5/6個&#xff1a;virtualbox安裝包 一、安裝 VirtualBox 由于win11版本問題&#xff0c;如果裝不了 virtualBox需要在官網安裝最新版…

新零售模式:跨境電商如何實現線上線下融合?

隨著數字時代的發展&#xff0c;新零售模式逐漸嶄露頭角&#xff0c;成為跨境電商發展的重要趨勢。線上線下融合不僅拓寬了銷售渠道&#xff0c;更提供了更豐富、更便捷的購物體驗。 本文將深入探討新零售模式在跨境電商中的應用&#xff0c;以及如何實現線上線下融合&#xf…

前后端請求之nginx配置

問題&#xff1a; 前端發送的請求&#xff0c;是如何請求到后端服務器的&#xff1f; 如&#xff0c;前端請求地址&#xff1a;http://loclhost/api/employee/login&#xff1a; 后端相應請求地址&#xff1a;http://loclhost:8080/admin/employee/login 回答&#xff1a; …

使用MfgTool燒寫前需準備的文件

一. 簡介 本文我們就來學習&#xff0c;如何將我們編譯的 uboot&#xff0c;zImage&#xff08;內核鏡像&#xff09;&#xff0c;xxx.dtb設備樹文件&#xff0c;還有制作的根文件系統&#xff0c;這四個文件燒寫到開發板中&#xff0c;最后 開發板能正常啟動。 本文這里使用…

【日志技術】附Logback入門教程

文章目錄 日志概論日志的體系Logback快速入門日志配置文件配置日志級別 日志概論 什么是日志&#xff1f;其實可以通過下面幾個問題來了解的。 系統系統能記住某些數據被誰操作&#xff0c;比如被誰刪除了&#xff1f;想分析用戶瀏覽系統的具體情況&#xff0c;比如挖掘用戶的…

一個簡單的Python自動化測試 logging 日志模塊,為何會難住一個工作6年的測試?

寫Python程序的時候&#xff0c; 我們經常需要寫日志&#xff0c; 以便調試程序&#xff0c;發現問題&#xff0c;以及查看程序的運行狀態。 Python自帶了logging模塊&#xff0c;可以將日志保存到.txt文件中&#xff0c; 也可以輸入到界面上。 我們希望日志有一定的格式, 比…

【性能優化】性能優化實戰

一、背景 在做code review的時候&#xff0c;經常會發現&#xff0c;因為開發習慣問題&#xff0c;很多研發人員喜歡在for循環中查詢數據庫。今天用一個真實例子&#xff0c;記錄一次查詢性能優化的例子 二、示例 代碼如下: classmethod fn_performance() def get_task_ins…

Linux常用調試工具gdb

程序編譯后&#xff0c;調試是十分重要的環節&#xff0c;如何更好更快的定位程序中的問題&#xff0c; 是加快程序開發進度的重要因素。Gdb 調試器是一款 GNU 開發組織并發布的 UNIX/Linux 下的程序調試工 具。GDB調試 編譯要點 對代碼進行編譯&#xff0c;注意一定要加上選項…

【C語言】【數據結構】自定義類型:結構體

引言 這是一篇對結構體的詳細介紹&#xff0c;這篇文章對結構體聲明、結構體的自引用、結構體的初始化、結構體的內存分布和對齊規則、庫函數offsetof、以及進行內存對齊的原因、如何修改默認對齊數、結構體傳參進行介紹和說明。 ? 豬巴戒&#xff1a;個人主頁? 所屬專欄&am…

Ubuntu——永久掛載/卸載硬盤

Ubuntu——永久掛載/卸載硬盤 一、掛載1. 查詢硬盤2. 格式化硬盤3. 掛載硬盤4. 開機自動掛載5. 查看掛載是否成功 二、取消掛載參考資料&#xff1a; 一、掛載 1. 查詢硬盤 sudo fdisk -l2. 格式化硬盤 # 格式化硬盤(/dev/sda)的文件系統&#xff0c;這里格式化為 ext4 系統…

面試經典150題(3-4)

leetcode 150道題 計劃花兩個月時候刷完&#xff0c;今天&#xff08;第二天&#xff09;完成了兩道(3-4)150&#xff1a; (26. 刪除有序數組中的重復項) 題目描述&#xff1a; 給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使…

C#生成Token字符串

Token字符串來保證數據安全性&#xff0c;如身份驗證、跨域訪問等。但是由于Token字符串的長度比較長&#xff0c;可能會占用過多的空間和帶寬資源&#xff0c;因此我們需要生成短的Token字符串 方法一&#xff1a;使用Base64編碼 Base64編碼是一種常用的編碼方式&#xff0c…

測試:接口參數測試

接口參數測試是接口測試中非常重要的一部分&#xff0c;主要是為了驗證接口在不同參數輸入下的行為和響應。下面詳細介紹一下接口參數測試的相關內容&#xff1a; 參數必填與非必填測試&#xff1a;需要測試接口對必填參數和非必填參數的處理。對于必填參數&#xff0c;不提供…

【學習筆記】LLM for Education

ChatGPT has entered the classroom: how LLMs could transform education 前言IntroductionThe risks are realEmbracing LLMsIntroducing the AI tutorAugmenting retrievalWill it catch on?總結 前言 一篇來自Nature的文章&#xff0c;探討了教育行業的不同參與者&#x…

webSRc實現瀏覽器播放rtsp【海康】

先上代碼 <template><div>video的配置自己寫<video id"video" autoplay width"900" height"900"></video></div> </template><script> export default {name: index1,data() {return {webRtcServer: …