最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js express的基本使用詳解

 更新時(shí)間:2025年08月08日 09:35:46   作者:會(huì)飛的魚先生  
Express是基于Node.js的輕量級(jí)Web框架,封裝了HTTP服務(wù)、路由管理、中間件等核心功能,簡化了Web應(yīng)用和API開發(fā),這篇文章給大家介紹Node.js express的基本使用,感興趣的朋友跟隨小編一起看看吧

Express 核心概念?

Express是基于Node.js的輕量級(jí)Web框架,封裝了HTTP服務(wù)、路由管理、中間件等核心功能,簡化了Web應(yīng)用和API開發(fā)
核心優(yōu)勢??

  • 中間件架構(gòu):支持模塊化請(qǐng)求處理流程
  • 路由系統(tǒng):直觀的URL到處理函數(shù)的映射
  • 高性能:非阻塞I/O模型與事件驅(qū)動(dòng)機(jī)制

基礎(chǔ)使用?

  • 安裝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"); 
})
//執(zhí)行
// node index.js
// nodemon index.js
// npm run start //package.json中配置

瀏覽器訪問

express 路由

路由確定了應(yīng)用程序如何響應(yīng)客戶端對(duì)特定端點(diǎn)的請(qǐng)求

  • 路由使用
const express = require('express');
const app = express();
// GET 路由
app.get('/home', (req, res) => {
  res.send('網(wǎng)站首頁');
});
// 根路由
app.get('/', (req, res) => {
  res.send('首頁');
});
// POST 路由
app.post('/login', (req, res) => {
  res.send('登錄成功');
});
// 路徑參數(shù)(規(guī)范寫法)
app.get('/users/:userId', (req, res) => {
  res.send(`User ID: ${req.params.userId}`); 
});
// 全方法路由
app.all('/search', (req, res) => {
  res.send('1秒鐘為您找到相關(guān)結(jié)果約100,000,000個(gè)');
});
// 多方法路由鏈
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(.)')中的 (.)被解析為正則表達(dá)式,但 ??path-to-regexp要求正則部分必須用 /包裹??。當(dāng)前寫法 :page(.*)會(huì)被解析為:

  • :page→ 命名參數(shù)
  • (.*)→ 未閉合的正則片段(缺少起始 /),觸發(fā)語法錯(cuò)誤 Unexpected

獲取請(qǐng)求參數(shù)

app.get('/request', (req, res) => {
  // 獲取報(bào)文的方式與原生 HTTP 獲取方式是兼容的
  console.log(req.method); // GET
  console.log(req.url); // /request
  console.log(req.httpVersion); // 1.1
  console.log(req.headers); // 請(qǐng)求頭
  // / express 獨(dú)有的獲取報(bào)文的方式
  console.log(req.query); // 查詢字符串
  console.log(req.get('host')); // 獲取指定的請(qǐng)求頭
  res.send('請(qǐng)求報(bào)文的獲取');
});
// 路徑參數(shù)
app.get('/users/:userId', (req, res) => {
  res.send(`User ID: ${req.params.userId}`); 
});

express 響應(yīng)設(shè)置

app.get("/response", (req, res) => {
  // 原生HTTP方式
  res.statusCode = 404;
  res.statusMessage = 'Not Found';
  res.setHeader('abc', 'xyz');
  res.write('響應(yīng)體');
  res.end('結(jié)束');
  // Express方式
  res.status(500); // 狀態(tài)碼
  res.set('xxx', 'yyy'); // 響應(yīng)頭
  res.send('中文響應(yīng)不亂碼'); // 響應(yīng)體
  // 鏈?zhǔn)秸{(diào)用
  res.status(404).set('xxx', 'yyy').send('你好朋友');
  // 其他響應(yīng)
  res.redirect('http://example.com'); // 重定向
  res.download('./package.json'); // 文件下載
  res.json({name: 'John'}); // JSON響應(yīng)
  res.sendFile(__dirname + '/home.html'); // 發(fā)送文件
});

注意:出現(xiàn)亂碼的情況

  • 響應(yīng)體中出現(xiàn)亂碼
    • 響應(yīng)頭中設(shè)置 Content-Type: text/plain; charset=utf-8
  res.writeHead(200, {
    'Content-Type': 'text/html; charset=utf-8' // 明確指定 UTF-8
  });
  res.write('響應(yīng)體');
  res.end('結(jié)束');

express 中間件

中間件(Middleware)本質(zhì)是一個(gè)回調(diào)函數(shù),可以訪問請(qǐng)求對(duì)象(request)和響應(yīng)對(duì)象(response)

  • 全局中間件
// 定義中間件
const logger = (req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
  next();
};
// 應(yīng)用中間件
app.use(logger);
// 多個(gè)全局中間件
app.use((req, res, next) => {
  console.log('中間件1');
  next();
});
app.use((req, res, next) => {
  console.log('中間件2');
  next();
});
  • 路由中間件
// 路由中間件(身份驗(yàn)證)
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(); 
}
// 單個(gè)中間件
app.get('/admin', authMiddleware, (req, res) => {
  res.send('管理員頁面--');
});
// 多個(gè)中間件
app.get('/dashboard', 
  authMiddleware, 
  logMiddleware, 
  (req, res) => {
    res.send('控制面板--');
  }
);
  • 靜態(tài)資源中間件
// public目錄作為靜態(tài)資源根目錄
app.use(express.static('./public')); 
// 動(dòng)態(tài)路由(注意順序問題)
app.get('/index.html', (req, res) => {
  res.send('動(dòng)態(tài)首頁');
});
  • 關(guān)鍵內(nèi)置中間件?
// 解析請(qǐng)求體(JSON)
app.use(express.json());
// 解析請(qǐng)求體(表單數(shù)據(jù))
app.use(express.urlencoded({ extended: true }));
// 解析Cookie
app.use(cookieParser());
// 解析Session(需要額外配置)
app.use(session({ secret: 'secret', resave: false, saveUninitialized: true }));
// 托管靜態(tài)資源(public目錄)
app.use(express.static('public'));
  • 請(qǐng)求體解析中間件
npm i body-parser
const bodyParser = require('body-parser');
// 處理表單數(shù)據(jù)
app.use(bodyParser.urlencoded({ extended: false }));
// 處理JSON數(shù)據(jù)
app.use(bodyParser.json());
app.post('/login', (req, res) => {
  console.log(req.body.username);
  console.log(req.body.password);
  res.send('登錄成功');
});

Router 路由模塊化

  • 創(chuàng)建路由模塊
//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

到此這篇關(guān)于Node.js- express的基本使用的文章就介紹到這了,更多相關(guān)Node.js express使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nodejs中使用throw進(jìn)行異常處理的操作方法

    nodejs中使用throw進(jìn)行異常處理的操作方法

    最近在寫一個(gè)nodejs項(xiàng)目時(shí)在思考一個(gè)問題: 在方法調(diào)其他方法的過程中,其他方法是采用return來返回特定格式的錯(cuò)誤數(shù)據(jù)還是使用throw來直接拋出錯(cuò)誤?所以本文給大家介紹了nodejs中使用throw進(jìn)行異常處理的操作方法,需要的朋友可以參考下
    2024-12-12
  • Node.js模塊封裝及使用方法

    Node.js模塊封裝及使用方法

    這篇文章主要為大家詳細(xì)介紹了Node.js模塊封裝及使用方法,感興趣的朋友可以參考一下
    2016-03-03
  • 使用nvm安裝node的詳細(xì)圖文教程

    使用nvm安裝node的詳細(xì)圖文教程

    nvm是nodejs的版本管理工具,可以在一個(gè)環(huán)境中同時(shí)安裝多個(gè)nodejs 版本(和配套的 npm 版本),并隨時(shí)切換,下面這篇文章主要給大家介紹了關(guān)于使用nvm安裝node的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-02-02
  • 解決koa2 ctx.render is not a function報(bào)錯(cuò)問題

    解決koa2 ctx.render is not a function報(bào)錯(cuò)問題

    這篇文章主要介紹了解決koa2 ctx.render is not a function報(bào)錯(cuò)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 徹底卸載?Node.js的三種方法總結(jié)

    徹底卸載?Node.js的三種方法總結(jié)

    node.js是一種流行的 JavaScript 運(yùn)行環(huán)境,但有時(shí)候你可能需要卸載它,這篇文章主要介紹了徹底卸載?Node.js的三種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • Node.js中的模塊化,npm包管理器詳解

    Node.js中的模塊化,npm包管理器詳解

    這篇文章主要介紹了node模塊與npm包管理工具,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-09-09
  • 修改NPM全局模式的默認(rèn)安裝路徑的方法

    修改NPM全局模式的默認(rèn)安裝路徑的方法

    這篇文章主要介紹了修改NPM全局模式的默認(rèn)安裝路徑的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解nodejs微信公眾號(hào)開發(fā)——1.接入微信公眾號(hào)

    詳解nodejs微信公眾號(hào)開發(fā)——1.接入微信公眾號(hào)

    本篇文章主要介紹了詳解nodejs微信公眾號(hào)開發(fā)——1.接入微信公眾號(hào),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • nodejs下載指定版本完整圖文步驟

    nodejs下載指定版本完整圖文步驟

    node.js官方版是一款專業(yè)性非常強(qiáng)的瀏覽輔助工具軟件,這款軟件操作十分的簡單、功能也是非常的強(qiáng)勁,下面這篇文章主要給大家介紹了關(guān)于nodejs下載指定版本的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • nodejs項(xiàng)目windows下開機(jī)自啟動(dòng)的方法

    nodejs項(xiàng)目windows下開機(jī)自啟動(dòng)的方法

    今天小編就為大家分享一篇nodejs項(xiàng)目windows下開機(jī)自啟動(dòng)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11

最新評(píng)論

扬州市| 合水县| 富锦市| 措勤县| 永寿县| 内江市| 晋宁县| 尼玛县| 大渡口区| 乌拉特后旗| 泗水县| 邯郸市| 利川市| 库车县| 海宁市| 安义县| 保山市| 廊坊市| 龙岩市| 扶风县| 尖扎县| 正镶白旗| 克拉玛依市| 合水县| 靖远县| 土默特左旗| 富阳市| 洞口县| 万安县| 安乡县| 尤溪县| 孝义市| 贞丰县| 昌邑市| 鲁山县| 吉林省| 五家渠市| 博兴县| 洞头县| 平罗县| 嘉禾县|