Skip to content

Express

[TOC]

索引

express

Application/Router

Application

Request

Response

Express

express

express()@【

express()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

json()@【

express.json()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

urlencoded()@【

express.urlencoded()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

text()【

express.text()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

raw()【

express.raw()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

Router()【

express.Router()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

static()【

express.static()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

Application/Router

use()【

app/router.use()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

get()【

app/router.get()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

post()【

app/router.post()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

put()【

app/router.put()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

delete()【

app/router.delete()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

all()【

app/router.all()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

route()【

app/router.route()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

param()【

app/router.param()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

Application

locals【

app.locals()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

listen()【

app.listen()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

set()【

app.set()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

engine()【

app.engine()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

Request

method【

req.method()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

baseUrl【

req.baseUrl()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

originalUrl【

req.originalUrl()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

url【

req.url()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

protocol【

req.protocol()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

hostname【

req.hostname()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

path【

req.path()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

query【

req.query()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

params【

req.params()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

body【

req.body()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

cookies【

req.cookies()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

app【

req.app()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

res【

req.res()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

Response

end()

res.end()(),用于结束当前响应流程,告知客户端响应已完成并发送最后的数据。

  • res.end()(),无参数,仅结束响应。

  • res.end()(data),发送数据后结束响应。

  • res.end()(data, encoding),指定编码格式发送数据后结束响应。

    • data?string|buffer,要发送给客户端的最后数据。

    • encoding?string默认:utf8,当 data 为字符串时,指定其编码格式(如 'utf8''base64' 等)。若 data 为 Buffer,此参数会被忽略。

  • 返回:

  • resResponse,返回当前的响应对象(res 本身),支持链式调用(不常用)。

示例

  1. 无参数:仅结束响应(客户端收到空响应)

    js
    if (req.url === '/empty') {
        res.end(); 
        return;
    }
  2. 带字符串数据:发送文本后结束响应

    js
    if (req.url === '/text') {
        res.end('Hello, World!'); // 等价于 res.end('Hello, World!', 'utf8')
        return;
    }
  3. 带 Buffer 和编码:发送二进制数据后结束响应

    js
    if (req.url === '/buffer') {
        const buffer = Buffer.from('Binary data', 'utf8');
        res.end(buffer); // encoding 被忽略(因 data 是 Buffer)
        return;
    }

核心特性

  1. 必须调用 end() 终止响应

    无论是否发送数据,都必须调用 res.end() 来终止响应,否则客户端会一直等待(超时后报错)。

  2. 数据大小限制

    res.end() 适合发送少量 “收尾数据”,若需发送大量数据,应使用 res.write() 分块发送,最后用 res.end() 结束。

  3. 调用时机

    res.end() 是响应的 “最后一步”,调用后不能再对响应进行任何操作,否则会抛出错误。

json()

res.json()(data),用于向客户端发送JSON 格式的响应

  • dataobject|array|string|...支持多种类型,要发送给客户端的最后数据。

  • 返回:

  • resResponse,返回当前的响应对象(res 本身),支持链式调用。

示例

  1. 链式调用(设置状态码后发送 JSON)

    js
    app.get('/error', (req, res) => {
      // 先设置 404 状态码,再发送错误信息 JSON
      res.status(404).json({ code: 404, message: '资源不存在' });
    });

核心特性

  1. data 参数支持的数据类型

    data 支持多种数据类型,Express 会自动将其序列化为 JSON 字符串:

    参数类型说明序列化规则示例
    Object普通对象(键值对){ name: '张三', age: 20 }{"name":"张三","age":20}
    Array数组[1, 2, 'a'][1,2,"a"]
    String字符串"hello""hello"(JSON 字符串格式,带双引号)
    Number数字(整数、浮点数、NaN、Infinity)4242NaNnullInfinitynull(JSON 规范不支持 NaN/Infinity)
    Boolean布尔值truetruefalsefalse
    null空值nullnull
    Date日期对象new Date('2023-01-01')"2023-01-01T00:00:00.000Z"(ISO 字符串)
    Buffer二进制缓冲区对象转为 base64 字符串,如 Buffer.from('test')"dGVzdA=="
    其他特殊对象MapSet 等(需实现 toJSON() 方法,否则默认序列化结果可能不符合预期)new Map([['a', 1]]){}(默认无 toJSON() 方法,需手动处理
    js
    const express = require('express');
    const app = express();
    
    // 1. 发送对象
    app.get('/user', (req, res) => {
      res.json({ name: '张三', age: 20, isStudent: false });
    });
    
    // 2. 发送数组
    app.get('/list', (req, res) => {
      res.json(['苹果', '香蕉', '橙子']);
    });
    
    // 3. 发送特殊值
    app.get('/special', (req, res) => {
      res.json({
        date: new Date('2023-01-01'), // "2023-01-01T00:00:00.000Z"
        buffer: Buffer.from('hello'), // "aGVsbG8="
        nan: NaN, // null
        infinity: Infinity, // null
        nullVal: null // null
      });
    });
    
    app.listen(3000);
  2. 对比 res.send()

    res.send() 也可以发送 JSON 数据(当传入对象 / 数组时),但 res.json() 更明确且有以下差异:

    • Content-Type 优先级

      • res.json()强制将响应头 Content-Type 设置为 application/json,即使之前通过 res.set() 手动设置了其他类型。

      • res.send() 会根据数据类型自动推断(如对象 / 数组设为 application/json,字符串设为 text/html)。

    • 对非对象类型的处理

      • res.json('hello') 会发送 JSON 字符串(带引号:"hello")。
      • res.send('hello') 会发送纯文本(不带引号:hello)。
    js
    // res.json() 发送字符串 → JSON 格式
    app.get('/json-str', (req, res) => {
      res.json('hello'); // 响应:"hello"(Content-Type: application/json)
    });
    
    // res.send() 发送字符串 → 纯文本格式
    app.get('/send-str', (req, res) => {
      res.send('hello'); // 响应:hello(Content-Type: text/html; charset=utf-8)
    });
  3. JSON 序列化限制

    res.json() 内部使用 JSON.stringify() 进行序列化,因此受限于 JSON 规范

    • 不支持循环引用(如 const a = {}; a.self = a; res.json(a) 会抛出错误)。
    • 不支持 FunctionSymbol 类型(会被忽略或转为 null)。
    • NaNInfinity 会被转为 null(如示例中所示)。

send()【

res.send()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

status()

res.status()(code),用于设置 HTTP 响应的状态码。常与 res.send()res.json() 等方法配合使用。

  • codenumber,表示 HTTP 响应状态码。其值必须符合 HTTP 协议规范,有效范围为 100-599

  • 返回:

  • resResponse,返回当前的响应对象(res 本身),支持链式调用。

示例

  1. 成功响应(200/201)

    js
    // 200(OK):请求成功
    app.get('/success', (req, res) => {
      res.status(200).send('请求成功'); // 链式调用:设置状态码后发送文本
    });
    
    // 201(Created):资源创建成功
    app.post('/user', (req, res) => {
      res.status(201).json({ message: '用户创建成功', id: 123 }); // 发送 JSON 响应
    });
  2. 客户端错误(400/404)

    js
    // 400(Bad Request):请求参数错误
    app.post('/login', (req, res) => {
      if (!req.body.username) {
        res.status(400).json({ error: '用户名不能为空' });
      }
    });
    
    // 404(Not Found):资源不存在
    app.get('/nonexistent', (req, res) => {
      res.status(404).send('<h1>页面不存在</h1>'); // 发送 HTML 响应
    });
  3. 服务器错误(500)

    js
    // 500(Internal Server Error):服务器内部错误
    app.get('/error', (req, res) => {
      try {
        // 模拟错误
        throw new Error('数据库连接失败');
      } catch (err) {
        res.status(500).json({ error: '服务器内部错误', details: err.message });
      }
    });
  4. 重定向(301/302)

    js
    // 301(Moved Permanently):永久重定向
    app.get('/old-path', (req, res) => {
      res.status(301).redirect('/new-path'); // 结合 redirect() 方法
    });
    
    // 302(Found):临时重定向(Express 中 redirect() 默认使用 302)
    app.get('/temp', (req, res) => {
      res.status(302).redirect('/temp-new');
    });

核心特性

  1. 对比 res.sendStatus()

    • res.status(code):仅设置状态码,不发送响应内容,需配合 send()json() 等方法发送数据;
    • res.sendStatus(code):设置状态码的同时,自动发送该状态码对应的默认描述文本(如 res.sendStatus(404) 等价于 res.status(404).send('Not Found'))。
    js
    // res.status() + send():自定义响应内容
    res.status(404).send('自定义:页面不见了'); 
    
    // res.sendStatus():使用默认描述
    res.sendStatus(404); // 响应体为 'Not Found'(默认文本)
  2. 状态码的默认值

    若未通过 res.status() 显式设置状态码,Express 会根据响应类型自动使用默认值

    • 成功响应(如 res.send('ok'))默认状态码为 200
    • 重定向(res.redirect())默认状态码为 302
    • 错误响应(如未捕获的异常)可能默认使用 500

render()【

res.render()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

set()【

res.set()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

res.cookie()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

redirect()【

res.redirect()()

  • :``,

  • :``,

  • :``,

  • 返回:

  • :``,

示例

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

核心特性

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js

注意事项

  1. ****:

    js
  2. ****:

    js
  3. ****:

    js