nodejs - express:流行的 Web 应用框架

文章目录

      • [1. 安装 Express.js](#1. 安装 Express.js)
      • [2. 基本使用](#2. 基本使用)
        • [2.1 创建 Express 应用](#2.1 创建 Express 应用)
        • [2.2 启动服务器](#2.2 启动服务器)
      • [3. 路由](#3. 路由)
        • [3.1 处理 GET 请求](#3.1 处理 GET 请求)
        • [3.2 处理 POST 请求](#3.2 处理 POST 请求)
        • [3.3 处理 PUT 请求](#3.3 处理 PUT 请求)
        • [3.4 处理 DELETE 请求](#3.4 处理 DELETE 请求)
        • [3.5 路由参数](#3.5 路由参数)
        • [3.6 路由处理链](#3.6 路由处理链)
      • [4. 中间件](#4. 中间件)
        • [4.1 使用内置中间件](#4.1 使用内置中间件)
        • [4.2 自定义中间件](#4.2 自定义中间件)
        • [4.3 错误处理中间件](#4.3 错误处理中间件)
      • [5. 静态文件](#5. 静态文件)
      • [6. 模板引擎](#6. 模板引擎)
        • [6.1 使用 EJS 模板引擎](#6.1 使用 EJS 模板引擎)
      • [7. Express 路由模块化](#7. Express 路由模块化)
        • [7.1 创建路由模块](#7.1 创建路由模块)
        • [7.2 在主应用中使用路由模块](#7.2 在主应用中使用路由模块)
      • [8. 常用方法总结](#8. 常用方法总结)

Express.js 是 Node.js 平台上一个非常流行的 Web 应用框架。它为构建 Web 应用程序和 RESTful API 提供了简洁、灵活的工具,帮助开发者快速搭建服务器,处理路由、请求、响应等常见的 Web 操作。

1. 安装 Express.js

首先需要安装 Express.js。在项目目录下打开终端,并使用 npm 安装:

bash 复制代码
npm init -y  # 初始化一个 Node.js 项目(如果没有 package.json 文件的话)
npm install express  # 安装 Express.js

2. 基本使用

2.1 创建 Express 应用

在你的项目中创建一个 JavaScript 文件(如 app.js),并初始化一个 Express 应用:

javascript 复制代码
// 引入 Express 模块
const express = require("express");

// 创建一个 Express 应用
const app = express();

// 设置端口号
const PORT = 3000;

// 处理根路由的请求
app.get("/", (req, res) => {
  res.send("Hello, Express!");
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器正在运行在 http://localhost:${PORT}`);
});
  • express() 创建一个 Express 应用实例。
  • app.get() 用于定义一个处理 HTTP GET 请求的路由。
2.2 启动服务器

通过运行 node app.js 启动服务器:

bash 复制代码
node app.js

你可以在浏览器中访问 http://localhost:3000,看到响应的 Hello, Express! 字符串。

3. 路由

路由是 Express 中非常重要的概念,用来处理不同的 HTTP 请求。你可以为各种 HTTP 方法(GET、POST、PUT、DELETE 等)定义路由。

3.1 处理 GET 请求
javascript 复制代码
app.get("/hello", (req, res) => {
  res.send("Hello, World!");
});
3.2 处理 POST 请求

Express 允许通过 app.post() 来处理 POST 请求。使用 express.urlencoded()express.json() 中间件来解析请求体。

javascript 复制代码
app.post("/submit", express.urlencoded({ extended: true }), (req, res) => {
  console.log(req.body);
  res.send("POST 请求已处理");
});
3.3 处理 PUT 请求
javascript 复制代码
app.put("/update/:id", (req, res) => {
  const { id } = req.params; // 获取路由参数
  res.send(`更新 ID 为 ${id} 的资源`);
});
3.4 处理 DELETE 请求
javascript 复制代码
app.delete("/delete/:id", (req, res) => {
  const { id } = req.params; // 获取路由参数
  res.send(`删除 ID 为 ${id} 的资源`);
});
3.5 路由参数

你可以在路由中定义动态路径参数,路径参数可以通过 req.params 访问。

javascript 复制代码
app.get("/user/:id", (req, res) => {
  const { id } = req.params; // 获取 URL 路径中的 id 参数
  res.send(`用户 ID: ${id}`);
});
3.6 路由处理链

你可以将多个路由处理函数链式地应用到某个路由上。Express 会按顺序执行这些处理函数。

javascript 复制代码
app.get(
  "/user",
  (req, res, next) => {
    console.log("第一层中间件");
    next();
  },
  (req, res) => {
    console.log("第二层中间件");
    res.send("User Route");
  }
);

4. 中间件

中间件是 Express 中的一个重要概念,通常用于处理请求的预处理、验证、日志记录等任务。中间件函数会按照定义的顺序被调用,可以在请求到达路由处理函数之前或之后执行。

4.1 使用内置中间件
  • express.json():用于解析请求体中的 JSON 数据。
  • express.urlencoded():用于解析 URL 编码的数据(如表单提交的数据)。
javascript 复制代码
app.use(express.json()); // 解析 JSON 数据
app.use(express.urlencoded({ extended: true })); // 解析 URL 编码的数据
4.2 自定义中间件

你可以定义自定义中间件来执行一些特定操作(如日志记录)。

javascript 复制代码
// 创建一个日志中间件
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 调用下一个中间件或路由处理器
});
4.3 错误处理中间件

错误处理中间件通常会有四个参数:err, req, res, next

javascript 复制代码
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send("Something went wrong!");
});

5. 静态文件

Express 提供了 express.static() 中间件来提供静态文件(如图片、CSS 文件、JavaScript 文件等)的访问。

javascript 复制代码
// 提供公共目录下的静态文件
app.use(express.static("public"));

假设 public 目录下有一个 index.html 文件,访问 http://localhost:3000/index.html 就能直接获取该文件。

6. 模板引擎

Express 支持使用模板引擎来渲染 HTML 页面。常见的模板引擎有 EJS、Pug、Handlebars 等。

6.1 使用 EJS 模板引擎

首先安装 EJS:

bash 复制代码
npm install ejs

然后配置 Express 使用 EJS 作为模板引擎:

javascript 复制代码
app.set("view engine", "ejs");

接着,创建一个 views 文件夹,并在其中添加 EJS 文件(例如 index.ejs):

html 复制代码
<!-- views/index.ejs -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title><%= title %></title>
  </head>
  <body>
    <h1>Welcome, <%= name %>!</h1>
  </body>
</html>

在路由中渲染 EJS 模板:

javascript 复制代码
app.get("/", (req, res) => {
  res.render("index", { title: "Home Page", name: "John Doe" });
});

7. Express 路由模块化

随着应用的增大,可以将路由分离成不同的模块进行管理。使用 express.Router() 可以实现这一点。

7.1 创建路由模块
javascript 复制代码
// userRouter.js
const express = require("express");
const router = express.Router();

router.get("/profile", (req, res) => {
  res.send("User profile");
});

router.get("/settings", (req, res) => {
  res.send("User settings");
});

module.exports = router;
7.2 在主应用中使用路由模块
javascript 复制代码
const express = require("express");
const app = express();
const userRouter = require("./userRouter");

app.use("/user", userRouter); // 所有以 /user 开头的路由都会交给 userRouter 处理

app.listen(3000, () => {
  console.log("Server running at http://localhost:3000");
});

8. 常用方法总结

方法 说明
app.get() 处理 HTTP GET 请求
app.post() 处理 HTTP POST 请求
app.put() 处理 HTTP PUT 请求
app.delete() 处理 HTTP DELETE 请求
app.use() 使用中间件,通常用于配置全局的功能或静态文件
app.listen() 启动服务器并监听指定端口
res.send() 发送响应数据
res.json() 发送 JSON 格式的响应
res.render() 渲染模板引擎

👉点击欢迎进入 我的网站

相关推荐
sophie旭2 小时前
webpack异步加载原理梳理解构
前端·javascript·webpack
小小荧2 小时前
Vue 原生渲染真要来了?Lynx引擎首次跑通Vue
前端·javascript
千寻girling2 小时前
面试官 : ” 说一下 Vue 中的 setup 中的 props 和 context “
前端·vue.js·面试
pan3035074792 小时前
Node.js组织机构与权限设计方案
node.js·数据库架构
KLW752 小时前
vue中 v-cloak指令
前端·javascript·vue.js
0思必得02 小时前
[Web自动化] Requests模块请求参数
运维·前端·python·自动化·html
xiaoxue..3 小时前
React Hooks :useRef、useState 与受控/非受控组件全解析
前端·react.js·前端框架
释怀不想释怀3 小时前
vue(登录,退出,浏览器本地存储机制)
前端·javascript·vue.js·ajax·html
wh_xia_jun3 小时前
vue 3极简教程草稿(未完成)
前端·javascript·vue.js