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

Node.js中Express框架入門示例教程

 更新時間:2025年08月23日 09:35:26   作者:天天進(jìn)步2015  
Express.js是Node.js的輕量級Web框架,以簡潔、靈活和高效著稱,支持路由、中間件、模板引擎,適合快速構(gòu)建Web應(yīng)用和API,接下來通過本文給大家介紹Node.js中Express框架入門教程,感興趣的朋友一起看看吧

什么是Express.js?

Express.js是Node.js最受歡迎的Web應(yīng)用框架之一,被稱為"快速、開放、極簡的Web框架"。它為構(gòu)建Web應(yīng)用程序和API提供了一套豐富的功能,同時保持了輕量級和靈活性。

為什么選擇Express?

  • 簡單易學(xué):API簡潔明了,學(xué)習(xí)曲線平緩
  • 靈活性強:不強制特定的項目結(jié)構(gòu),開發(fā)者可以自由組織代碼
  • 中間件豐富:擁有龐大的中間件生態(tài)系統(tǒng)
  • 性能優(yōu)秀:輕量級設(shè)計,運行效率高
  • 社區(qū)活躍:文檔完善,社區(qū)支持強大

環(huán)境準(zhǔn)備

在開始之前,確保您的系統(tǒng)已安裝:

  • Node.js(版本12或更高)
  • npm(通常隨Node.js一起安裝)

檢查安裝版本:

node --version
npm --version

安裝Express

創(chuàng)建新項目

# 創(chuàng)建項目目錄
mkdir my-express-app
cd my-express-app
# 初始化npm項目
npm init -y
# 安裝Express
npm install express

使用Express生成器(可選)

# 全局安裝Express生成器
npm install -g express-generator
# 創(chuàng)建項目
express --view=ejs my-app
cd my-app
npm install

創(chuàng)建第一個Express應(yīng)用

讓我們創(chuàng)建一個簡單的"Hello World"應(yīng)用:

基礎(chǔ)示例

// app.js
const express = require('express');
const app = express();
const port = 3000;
// 定義路由
app.get('/', (req, res) => {
  res.send('Hello World!');
});
// 啟動服務(wù)器
app.listen(port, () => {
  console.log(`服務(wù)器運行在 http://localhost:${port}`);
});

運行應(yīng)用:

node app.js

訪問 http://localhost:3000,您將看到"Hello World!"消息。

路由基礎(chǔ)

路由決定了應(yīng)用程序如何響應(yīng)客戶端對特定端點的請求。

HTTP方法

// GET請求
app.get('/users', (req, res) => {
  res.send('獲取用戶列表');
});
// POST請求
app.post('/users', (req, res) => {
  res.send('創(chuàng)建新用戶');
});
// PUT請求
app.put('/users/:id', (req, res) => {
  res.send(`更新用戶 ${req.params.id}`);
});
// DELETE請求
app.delete('/users/:id', (req, res) => {
  res.send(`刪除用戶 ${req.params.id}`);
});

路由參數(shù)

// 路徑參數(shù)
app.get('/users/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`用戶ID: ${userId}`);
});
// 多個參數(shù)
app.get('/users/:userId/posts/:postId', (req, res) => {
  const { userId, postId } = req.params;
  res.json({ userId, postId });
});
// 查詢參數(shù)
app.get('/search', (req, res) => {
  const { q, page, limit } = req.query;
  res.json({ query: q, page, limit });
});

路由模式匹配

// 通配符
app.get('/ab*cd', (req, res) => {
  res.send('匹配 abcd, abxcd, abRANDOMcd 等');
});
// 可選參數(shù)
app.get('/products/:id?', (req, res) => {
  if (req.params.id) {
    res.send(`產(chǎn)品ID: ${req.params.id}`);
  } else {
    res.send('所有產(chǎn)品');
  }
});

中間件詳解

中間件是Express的核心概念,它是在請求-響應(yīng)循環(huán)中執(zhí)行的函數(shù)。

應(yīng)用級中間件

// 全局中間件
app.use((req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
  next(); // 調(diào)用next()繼續(xù)執(zhí)行下一個中間件
});
// 特定路徑的中間件
app.use('/api', (req, res, next) => {
  console.log('API請求');
  next();
});

內(nèi)置中間件

// 解析JSON請求體
app.use(express.json());
// 解析URL編碼的請求體
app.use(express.urlencoded({ extended: true }));
// 提供靜態(tài)文件服務(wù)
app.use(express.static('public'));

第三方中間件

# 安裝常用中間件
npm install morgan cors helmet compression
const morgan = require('morgan');
const cors = require('cors');
const helmet = require('helmet');
const compression = require('compression');
// 日志中間件
app.use(morgan('combined'));
// 啟用CORS
app.use(cors());
// 安全中間件
app.use(helmet());
// 壓縮響應(yīng)
app.use(compression());

錯誤處理中間件

// 錯誤處理中間件必須有四個參數(shù)
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({
    error: '服務(wù)器內(nèi)部錯誤',
    message: err.message
  });
});

模板引擎

Express支持多種模板引擎,如EJS、Pug、Handlebars等。

使用EJS

npm install ejs
// 設(shè)置模板引擎
app.set('view engine', 'ejs');
app.set('views', './views');
// 渲染模板
app.get('/profile/:name', (req, res) => {
  res.render('profile', { 
    username: req.params.name,
    title: '用戶資料'
  });
});

創(chuàng)建模板文件 views/profile.ejs

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
</head>
<body>
    <h1>歡迎, <%= username %>!</h1>
    <p>這是您的個人資料頁面。</p>
</body>
</html>

完整示例:簡單的博客API

const express = require('express');
const app = express();
const port = 3000;
// 中間件
app.use(express.json());
app.use(express.static('public'));
// 模擬數(shù)據(jù)
let posts = [
  { id: 1, title: '第一篇文章', content: '這是第一篇文章的內(nèi)容' },
  { id: 2, title: '第二篇文章', content: '這是第二篇文章的內(nèi)容' }
];
// 獲取所有文章
app.get('/api/posts', (req, res) => {
  res.json(posts);
});
// 獲取特定文章
app.get('/api/posts/:id', (req, res) => {
  const post = posts.find(p => p.id === parseInt(req.params.id));
  if (!post) {
    return res.status(404).json({ error: '文章未找到' });
  }
  res.json(post);
});
// 創(chuàng)建新文章
app.post('/api/posts', (req, res) => {
  const { title, content } = req.body;
  if (!title || !content) {
    return res.status(400).json({ error: '標(biāo)題和內(nèi)容不能為空' });
  }
  const newPost = {
    id: posts.length + 1,
    title,
    content
  };
  posts.push(newPost);
  res.status(201).json(newPost);
});
// 更新文章
app.put('/api/posts/:id', (req, res) => {
  const postIndex = posts.findIndex(p => p.id === parseInt(req.params.id));
  if (postIndex === -1) {
    return res.status(404).json({ error: '文章未找到' });
  }
  const { title, content } = req.body;
  posts[postIndex] = { ...posts[postIndex], title, content };
  res.json(posts[postIndex]);
});
// 刪除文章
app.delete('/api/posts/:id', (req, res) => {
  const postIndex = posts.findIndex(p => p.id === parseInt(req.params.id));
  if (postIndex === -1) {
    return res.status(404).json({ error: '文章未找到' });
  }
  posts.splice(postIndex, 1);
  res.status(204).send();
});
// 錯誤處理
app.use((req, res) => {
  res.status(404).json({ error: '頁面未找到' });
});
app.listen(port, () => {
  console.log(`博客API運行在 http://localhost:${port}`);
});

最佳實踐

項目結(jié)構(gòu)建議

my-app/
├── public/          # 靜態(tài)文件
├── views/           # 模板文件
├── routes/          # 路由模塊
├── middleware/      # 自定義中間件
├── models/          # 數(shù)據(jù)模型
├── controllers/     # 控制器
├── config/          # 配置文件
├── app.js          # 主應(yīng)用文件
└── package.json

路由模塊化

// routes/users.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
  res.send('用戶列表');
});
router.get('/:id', (req, res) => {
  res.send(`用戶ID: ${req.params.id}`);
});
module.exports = router;
// 在主應(yīng)用中使用
const userRoutes = require('./routes/users');
app.use('/users', userRoutes);

環(huán)境配置

// 使用環(huán)境變量
const port = process.env.PORT || 3000;
const env = process.env.NODE_ENV || 'development';
if (env === 'development') {
  app.use(morgan('dev'));
}

下一步學(xué)習(xí)

掌握了Express基礎(chǔ)后,您可以繼續(xù)學(xué)習(xí):

  • 數(shù)據(jù)庫集成:MongoDB (Mongoose)、MySQL (Sequelize)
  • 身份驗證:JWT、Passport.js
  • API文檔:Swagger/OpenAPI
  • 測試:Jest、Supertest
  • 部署:Docker、Heroku、AWS

總結(jié)

Express.js是一個功能強大而又簡潔的Web框架,非常適合快速構(gòu)建Web應(yīng)用程序和API。通過掌握路由、中間件、模板引擎等核心概念,您就能夠開發(fā)出功能豐富的Web應(yīng)用。

記住Express的哲學(xué):保持簡單,但提供足夠的靈活性讓開發(fā)者能夠構(gòu)建復(fù)雜的應(yīng)用程序。隨著經(jīng)驗的積累,您將能夠利用Express的強大功能構(gòu)建更加復(fù)雜和優(yōu)雅的Web解決方案。

相關(guān)資源

到此這篇關(guān)于Node.js中Express框架入門教程的文章就介紹到這了,更多相關(guān)Node.js Express框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nodejs多站點切換Htpps協(xié)議詳解及簡單實例

    Nodejs多站點切換Htpps協(xié)議詳解及簡單實例

    這篇文章主要介紹了Nodejs多站點切換Htpps協(xié)議詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 使用Fetch API執(zhí)行GraphQL查詢和變體問題

    使用Fetch API執(zhí)行GraphQL查詢和變體問題

    這篇文章主要介紹了使用Fetch API執(zhí)行GraphQL查詢和變體問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • node.js中的buffer.toJSON方法使用說明

    node.js中的buffer.toJSON方法使用說明

    這篇文章主要介紹了node.js中的buffer.toJSON方法使用說明,本文介紹了buffer.toJSON的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nodejs小文件拷貝復(fù)制和大文件拷貝復(fù)制方法代碼

    Nodejs小文件拷貝復(fù)制和大文件拷貝復(fù)制方法代碼

    NodeJS提供了基本的文件操作API,但是像文件拷貝復(fù)制這種高級功能就沒有提供,因此我們先拿文件拷貝程序練手,文件拷貝復(fù)制是在Node.js中常見的操作之一,它允許我們將一個文件的內(nèi)容復(fù)制到另一個文件中
    2023-11-11
  • 利用node.js本地搭建HTTP服務(wù)器

    利用node.js本地搭建HTTP服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了利用node.js本地搭建HTTP服務(wù)器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • CentOS上安裝Node.js和mongodb筆記

    CentOS上安裝Node.js和mongodb筆記

    這篇文章主要介紹了CentOS上安裝Node.js和mongodb筆記,本文講解了Python安裝、Node.js安裝、npm安裝、mongodb驅(qū)動安裝、mongodb數(shù)據(jù)庫操作測試代碼等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 使用node.JS中的url模塊解析URL信息

    使用node.JS中的url模塊解析URL信息

    本文將詳細(xì)介紹nodeJS中的URL模塊的使用方法,利用URL模塊解析出URL相關(guān)信息
    2020-02-02
  • gyp?ERR!報錯問題解決辦法

    gyp?ERR!報錯問題解決辦法

    這篇文章主要給大家介紹了關(guān)于gyp?ERR!報錯問題的解決辦法,文中將解決的辦法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • 前端Electron新手入門教程詳解

    前端Electron新手入門教程詳解

    這篇文章主要介紹了Electron新手入門教程詳解,首先圍繞Electron框架的關(guān)鍵知識點進(jìn)行詳細(xì)講解,然后對DEMO程序進(jìn)行分析,讓前端開發(fā)人員對使用Electron開發(fā)桌面應(yīng)用程序有一個初步的了解。,需要的朋友可以參考下
    2019-06-06
  • node.js如何根據(jù)URL返回指定的圖片詳解

    node.js如何根據(jù)URL返回指定的圖片詳解

    這篇文章主要介紹了NODE.JS如何根據(jù)URL返回指定的圖片詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論

清水河县| 平和县| 门源| 东宁县| 汾西县| 安吉县| 卓尼县| 祁门县| 鹤山市| 清丰县| 肥西县| 高邮市| 砀山县| 岳普湖县| 保定市| 衢州市| 永城市| 漠河县| 武乡县| 安塞县| 天全县| 福建省| 格尔木市| 沐川县| 上犹县| 盘山县| 工布江达县| 眉山市| 清原| 富源县| 醴陵市| 芒康县| 盱眙县| 六枝特区| 新干县| 中牟县| 耿马| 江西省| 思南县| 抚宁县| 逊克县|