当前位置: 首页 > news >正文

res.json() vs res.send() 的区别

在 Express.js 中,res.json()res.send() 都是用于发送 HTTP 响应的方法,但它们有一些关键区别:

1. res.send([body])

  • 自动推断 Content-Type
    • 如果传入 String,则设置 Content-Type: text/html
    • 如果传入 ObjectArray,则自动转为 JSON 并设置 Content-Type: application/json
    • 如果传入 Buffer,则设置 Content-Type: application/octet-stream
  • 适用场景
    • 适用于发送多种类型的数据(字符串、JSON、Buffer 等)
    • 更通用,但需要 Express 自动推断 Content-Type

示例:

res.send("Hello World");          // Content-Type: text/html
res.send({ status: "OK" });      // Content-Type: application/json
res.send(Buffer.from("..."));    // Content-Type: application/octet-stream

2. res.json([body])

  • 强制设置 Content-Type: application/json
    • 无论传入什么数据(对象、数组、字符串等),都会强制转为 JSON 并设置 JSON 的 Content-Type
    • 如果传入非对象(如字符串),它仍然会尝试转为 JSON(如 "Hello""Hello",仍然是合法的 JSON)
  • 适用场景
    • 专门用于返回 JSON 数据,语义更明确
    • res.send() 更严格,确保返回的是 JSON

示例:

res.json({ status: "OK" });      // Content-Type: application/json
res.json("Hello");               // Content-Type: application/json(返回 "Hello" 字符串形式的 JSON)
res.json([1, 2, 3]);             // Content-Type: application/json

关键区别总结

特性res.send()res.json()
自动推断 Content-Type✔️(根据输入类型)❌(强制 application/json
适用数据类型字符串、JSON、Buffer 等主要是 JSON(但可接受其他类型并强制转 JSON)
语义明确性通用,不明确明确表示返回 JSON
性能稍快(直接发送)稍慢(强制 JSON 转换)

推荐使用场景

  • res.json()

    • 当明确要返回 JSON 数据时(如 API 响应)
    • 确保客户端始终收到正确的 Content-Type
  • res.send()

    • 当返回非 JSON 数据(如 HTML、纯文本或 Buffer)
    • 需要更灵活的响应类型时

常用返回基本格式

res.status(200).json({ status: 'success', message: 'xxxxx', data: '{ xxx:xx }' });

结论

  • 如果返回 JSON,优先用 res.json()(语义更清晰)。
  • 如果返回其他类型(如 HTML、文件),用 res.send()
  • 两者在返回对象时几乎等效,但 res.json() 更明确。

相关文章:

  • Java内存区域与内存溢出异常分析与解决
  • linux命令 systemctl 和 supervisord 区别及用法解读
  • 卷积神经网络(CNN)完全指南:从原理到实战
  • ESP32基础知识1:项目工程建立和烧录
  • 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
  • 操作系统学习(十)——文件系统
  • Marvin - 生成结构化输出 和 构建AI工作流
  • BLIP-2
  • Gunicorn 配置文件参数详解
  • Git初识Git安装
  • 税法 -2.2- 增值税-允许抵扣的进项税额
  • 6月1日星期日今日早报简报微语报早读
  • CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures
  • python学习打卡day42
  • 2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress
  • STM32F407寄存器操作(多通道单ADC+DMA)
  • PINN for PDE(偏微分方程)1 - 正向问题
  • Beta分布Dirichlet分布
  • Baklib知识中台加速企业服务智能化实践
  • 算法学习--持续更新
  • 怎么做qq钓鱼网站吗/如何申请百度竞价排名
  • 做外贸网站一定要会英语吗/武汉seo认可搜点网络
  • 网站建设与管理 ppt/网站提交收录入口链接
  • 怎么看一家网站是谁做的/小说搜索风云榜排名
  • 淮安网站建设多少钱/seo知名公司
  • 网站的服务器怎么做的/搜索引擎seo关键词优化效果