Node.js- express的基本使用

Express 核心概念?

Express是基于Node.js的輕量級Web框架,封裝了HTTP服務、路由管理、中間件等核心功能,簡化了Web應用和API開發
核心優勢??

  • 中間件架構:支持模塊化請求處理流程
  • 路由系統:直觀的URL到處理函數的映射
  • 高性能:非阻塞I/O模型與事件驅動機制
基礎使用?
  • 安裝express
npm init
npm i express
  • 快速入門
// index.js
const express = require('express');
const port = 3000;
const app = express();app.get('/a',(req,res)=>{res.send("Welcome to a Page");
})app.listen(port,()=>{console.log("Server is running on port 3000"); 
})
//執行
// node index.js
// nodemon index.js
// npm run start //package.json中配置
  • 瀏覽器訪問
    在這里插入圖片描述
express 路由

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

  • 路由使用
const express = require('express');
const app = express();// GET 路由
app.get('/home', (req, res) => {res.send('網站首頁');
});// 根路由
app.get('/', (req, res) => {res.send('首頁');
});// POST 路由
app.post('/login', (req, res) => {res.send('登錄成功');
});
// 路徑參數(規范寫法)
app.get('/users/:userId', (req, res) => {res.send(`User ID: ${req.params.userId}`); 
});// 全方法路由
app.all('/search', (req, res) => {res.send('1秒鐘為您找到相關結果約100,000,000個');
});// 多方法路由鏈
app.route('/books').get((req, res) => res.send('Get Books')).post((req, res) => res.send('Add Book'));// 404 路由
app.all('*', (req, res) => {res.send('<h1>404 Not Found</h1>');
});app.listen(3000);

在這里插入圖片描述

?注意:?
路由路徑語法沖突??app.all(':page(.)')中的 (.)被解析為正則表達式,但 ??path-to-regexp要求正則部分必須用 /包裹??。當前寫法 :page(.*)會被解析為:

  • :page→ 命名參數
  • (.*)→ 未閉合的正則片段(缺少起始 /),觸發語法錯誤 Unexpected
獲取請求參數
app.get('/request', (req, res) => {// 獲取報文的方式與原生 HTTP 獲取方式是兼容的console.log(req.method); // GETconsole.log(req.url); // /requestconsole.log(req.httpVersion); // 1.1console.log(req.headers); // 請求頭// / express 獨有的獲取報文的方式console.log(req.query); // 查詢字符串console.log(req.get('host')); // 獲取指定的請求頭res.send('請求報文的獲取');
});// 路徑參數
app.get('/users/:userId', (req, res) => {res.send(`User ID: ${req.params.userId}`); 
});
express 響應設置
app.get("/response", (req, res) => {// 原生HTTP方式res.statusCode = 404;res.statusMessage = 'Not Found';res.setHeader('abc', 'xyz');res.write('響應體');res.end('結束');// Express方式res.status(500); // 狀態碼res.set('xxx', 'yyy'); // 響應頭res.send('中文響應不亂碼'); // 響應體// 鏈式調用res.status(404).set('xxx', 'yyy').send('你好朋友');// 其他響應res.redirect('http://example.com'); // 重定向res.download('./package.json'); // 文件下載res.json({name: 'John'}); // JSON響應res.sendFile(__dirname + '/home.html'); // 發送文件
});

注意:出現亂碼的情況

  • 響應體中出現亂碼
    • 響應頭中設置 Content-Type: text/plain; charset=utf-8
  res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8' // 明確指定 UTF-8});res.write('響應體');res.end('結束');
express 中間件

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

  • 全局中間件
// 定義中間件
const logger = (req, res, next) => {console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);next();
};// 應用中間件
app.use(logger);// 多個全局中間件
app.use((req, res, next) => {console.log('中間件1');next();
});app.use((req, res, next) => {console.log('中間件2');next();
});
  • 路由中間件
// 路由中間件(身份驗證)
const authMiddleware = (req, res, next) => {if (req.query.token === '123') next();else res.status(401).send('Unauthorized');
};
const logMiddleware = (req, res, next) => {console.log('日志記錄');next(); 
}
// 單個中間件
app.get('/admin', authMiddleware, (req, res) => {res.send('管理員頁面--');
});// 多個中間件
app.get('/dashboard', authMiddleware, logMiddleware, (req, res) => {res.send('控制面板--');}
);
  • 靜態資源中間件
// public目錄作為靜態資源根目錄
app.use(express.static('./public')); // 動態路由(注意順序問題)
app.get('/index.html', (req, res) => {res.send('動態首頁');
});
  • 關鍵內置中間件?
// 解析請求體(JSON)
app.use(express.json());// 解析請求體(表單數據)
app.use(express.urlencoded({ extended: true }));// 解析Cookie
app.use(cookieParser());
// 解析Session(需要額外配置)
app.use(session({ secret: 'secret', resave: false, saveUninitialized: true }));// 托管靜態資源(public目錄)
app.use(express.static('public'));
  • 請求體解析中間件
npm i body-parserconst bodyParser = require('body-parser');// 處理表單數據
app.use(bodyParser.urlencoded({ extended: false }));// 處理JSON數據
app.use(bodyParser.json());app.post('/login', (req, res) => {console.log(req.body.username);console.log(req.body.password);res.send('登錄成功');
});
Router 路由模塊化
  • 創建路由模塊
//routes/userRouter.js
const express = require('express');
const router = express.Router();router.get('/', (req, res) => {res.send('用戶首頁');
});router.get('/list', (req, res) => {res.send('用戶列表');});router.get('/:id', (req, res) => {res.send(`用戶詳情: ${req.params.id}`);
});module.exports = router;
  • 主文件使用路由
const express = require('express');
const app = express();
const userRouter = require('./routes/userRouter');app.use('/users', userRouter);app.listen(3000);// 返回地址:
//  http://localhost:3000/users/   -> 用戶首頁
//  http://localhost:3000/users/list   -> 用戶列表
//  http://localhost:3000/users/11 -> 用戶詳情: 11

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

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

相關文章

計算機網絡:網絡號和網絡地址的區別

在計算機網絡中&#xff0c;“網絡號”和“網絡地址”是兩個密切相關但含義不同的概念&#xff0c;主要用于IP地址的劃分和網絡標識。以下從定義、作用、關聯與區別等方面詳細說明&#xff1a; 1. 網絡號&#xff08;Network Number&#xff09;定義&#xff1a;網絡號是IP地址…

【iOS】3GShare仿寫

【iOS】3GShare仿寫 文章目錄【iOS】3GShare仿寫登陸注冊界面主頁搜索文章活動我的總結登陸注冊界面 這個界面的ui東西不多&#xff0c;主要就是幾個輸入框及對輸入內容的一些判斷 登陸界面 //這里設置了一個初始密碼并儲存到NSUserDefaults中 NSUserDefaults *defaults [N…

從案例學習cuda編程——線程模型和顯存模型

1. cuda介紹CUDA&#xff08;Compute Unified Device Architecture&#xff0c;統一計算設備架構&#xff09;是NVIDIA推出的一種并行計算平臺和編程模型。它允許開發者利用NVIDIA GPU的強大計算能力來加速計算密集型任務。CUDA通過提供一套專門的API和編程接口&#xff0c;使得…

進階向:YOLOv11模型輕量化

YOLOv11模型輕量化詳解:從理論到實踐 引言 YOLO(You Only Look Once)系列模型因其高效的實時檢測能力而廣受歡迎。YOLOv11作為該系列的最新演進版本,在精度和速度上均有顯著提升。然而,原始模型對計算資源的需求較高,難以在邊緣設備或移動端部署。輕量化技術通過減少模…

2025-08 安卓開發面試拷打記錄(面試題)

想跑路了&#xff0c;開始學八股&#xff0c;幾個主動找的大廠試了下水&#xff0c;后續看情況更新。樓主一年經驗&#xff0c;學的c被騙來干安卓&#xff0c;雙非本科。2025-07-31 小鵬匯天 安卓開發一面synchronizedhandler視圖刷新binderjvm垃圾回收內存泄漏排查glide緩…

風丘助力混合動力汽車工況測試:精準采集整車信號解決方案

一、背景 混合動力汽車是介于純電動汽車與燃油汽車兩者之間的一種新能源汽車。它既包含純電動汽車無污染、啟動快的優勢&#xff0c;又擁有燃油車續航便捷、不受電池容量限制的特點。在當前環境下&#xff0c;混合動力汽車比純電動汽車更符合目前的市場需求。 然而&#xff…

??MCU程序的存儲方式與存儲區域大小要求?

程序的段的存儲方式與存儲區域大小要求 程序的存儲和運行涉及 ROM&#xff08;Flash/非易失性存儲器&#xff09; 和 RAM&#xff08;易失性存儲器&#xff09; 的分配&#xff0c;不同段在存儲和運行時具有不同的特性。以下是詳細的分類和計算方式&#xff1a;1. 程序文件的存…

Lesson 31 Success story

Lesson 31 Success story 詞匯 retire v.退休,退役[運動]去睡覺 構成:re-表示重復 tire v.感到累一tried a.累的 tyre n.輪胎 用法:retire from 單位 從…退休(過去時) 例句:他從學校退休了。 He retired from our school. retire例句: 1.他越來越老了&#xff0c;他即將退休。…

2025年8月4日私魚創作平臺v1.0.4公測版更新發布-完成大部分功能包含關注創作者以及發布作品及合集功能優雅草科技

2025年8月4日私魚創作平臺v1.0.4公測版更新發布-完成大部分功能包含關注創作者以及發布作品及合集功能優雅草科技 鯨魚小說分銷系統介紹 優雅草私魚創作系統——產品介紹 系統概述 優雅草私魚創作系統&#xff08;簡稱“私魚”&#xff09;是一款專注于私域流量運營的垂直化…

鷓鴣云:光伏電站的“智慧中樞”,精準調控逆變器

光伏電站如星辰散落于大地&#xff0c;那些默默工作的逆變器便是每一處光芒的關鍵心臟。然而&#xff0c;分布廣袤、設備眾多&#xff0c;傳統運維如盲人摸象&#xff0c;效率低下&#xff0c;故障難尋&#xff0c;白白流失寶貴電能。鷓鴣云光伏運維軟件應時而生&#xff0c;它…

java中Reflection反射(一)

目錄 一、概述 二、class類&#xff1a; 1、獲取類的字節碼文件&#xff1a; &#xff08;1&#xff09;方式一&#xff1a;直接通過一個class的靜態變量class獲取 &#xff08;2&#xff09;方式二&#xff1a;如果知道一個class的完整類名&#xff0c;可以通過靜態方法Cl…

CVE-2021-1879

一、漏洞原理 CVE-2021-1879 是 IBM WebSphere Application Server 中存在的一個 路徑遍歷&#xff08;Path Traversal&#xff09; 漏洞&#xff0c;其核心原理為&#xff1a; ①WebSphere 在處理某些文件操作請求&#xff08;如下載、上傳或配置文件讀取&#xff09;時&#…

二進制簽名查找器(Aho-Corasick 自動機):設計思路與實現原理(C/C++代碼實現)

在逆向工程、惡意軟件分析和二進制文件解析領域&#xff0c;快速準確地識別特定字節模式&#xff08;即“簽名”&#xff09;是一項核心任務。本文將圍繞一款基于PE-bear工具的二進制簽名查找器&#xff0c;深入解析其設計思路、實現原理及相關技術背景&#xff0c;揭示其如何高…

後端開發技術教學(二) 條件指令、循環結構、定義函數

書接上回&#xff1a;後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客 必要資源&#xff1a; trae中文版下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一鍵部署 PHP 開發環境 小皮出品 目錄 一、條件指令 1.1 if() …

狀壓DP-基本框架

狀壓DP-基本框架一、狀壓DP的核心思想與適用場景1.1 問題特征1.2 核心思想1.3 與傳統DP的對比二、位運算基礎&#xff1a;狀壓DP的語法三、狀壓DP的基本框架3.1 步驟拆解3.2 通用代碼模板四、經典案例詳解4.1 旅行商問題&#xff08;TSP&#xff09;問題描述狀壓DP設計代碼實現…

Web 端 AI 圖像生成技術的應用與創新:虛擬背景與創意圖像合成

隨著 Stable Diffusion、Midjourney 等生成式 AI 模型的爆發,Web 端圖像生成技術從“實驗室demo”走向“工業化應用”。其中,虛擬背景替換(如視頻會議的動態背景生成)和創意圖像合成(如用戶上傳素材與 AI 生成元素的融合)成為最具代表性的場景,它們通過“文本描述→AI 生…

應急響應知識總結

應急響應 Windows系統 查賬號 1、查看服務器是否有弱口令&#xff0c;遠程管理端口是否對公網開放。 檢查方法&#xff1a;據實際情況咨詢相關服務器管理員。 2、查看服務器是否存在可疑賬號、新增賬號。 檢查方法&#xff1a;打開 cmd 窗口&#xff0c;輸入 lusrmgr.msc …

智慧水務賦能二次供水管理精細化轉型:物聯網驅動的全鏈路解決方案

隨著我國城鎮化率激增&#xff0c;高層建筑占比上升&#xff0c;二次供水系統已成為保障城市供水安全的核心環節。然而&#xff0c;傳統管理模式面臨設備老化、運維粗放、監管缺失等矛盾&#xff0c;在此背景下&#xff0c;《“十四五”節水型社會建設規劃》明確要求推進二次供…

tsmc 5nm lvs之 short難搞的類型

1、M3層以上的層次發生的short&#xff0c;dengsity很高的情況下&#xff0c;兩根信號net導致的short&#xff0c;刪除其中一根然后ecoRoute fix不掉的情況下&#xff0c;該怎么辦&#xff0c;可以嘗試去cut 周圍或者上方的power。 2、M1&#xff0c; M2由于cell 內部出pin&…

初識神經網絡01——認識PyTorch

文章目錄一、認識PyTorch1.1 PyTorch是什么1.2 安裝PyTorch二、認識Tensor2.1 創建Tensor2.1.1 基本方式2.2.2 創建線性和隨機張量2.2 Tensor屬性2.2.1 切換設備2.2.2 類型轉換2.3 Tensor與Numpy的數據轉換2.3.1 張量轉ndarray2.3.2 Numpy轉張量2.4 Tensor常見操作2.4.1 取值2.…