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

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() 更明确。
http://www.xdnf.cn/news/10417.html

相关文章:

  • 03.MySQL表的操作详解
  • nc 命令示例
  • MySQ-8.42 MGR 组复制部署及详解
  • 医疗数理范式化:从范式迁移到认知革命的深度解析
  • 微服务面试(分布式事务、注册中心、远程调用、服务保护)
  • 基于GeoTools和OSM路网求解两条道路相交点-以长沙市为例
  • CSS篇-6
  • Java中的线程池七大核心参数设置策略和使用场景参数设计举例
  • 6.01打卡
  • iOS安全和逆向系列教程 第18篇:iOS应用脱壳技术详解与实战
  • python集成inotify-rsync实现跨服务器文件同步
  • GO+RabbitMQ+Gin+Gorm+docker 部署 demo
  • Qwen2.5-VL 视觉编码器的 RMSNorm
  • MQTT入门实战宝典:从零起步掌握物联网核心通信协议
  • Android Stdio 编译 文件生成,以及Gradle
  • 科研学习|科研软件——激活后的Origin导出图时突然出现了demo水印
  • TDenigne 集群可视化管理
  • UVa1457/LA4746 Decrypt Messages
  • 卫生间改造翻新怎么选品牌?智能健康、适老有爱,我选瑞尔特
  • windows+APP PDFgear 免费工具
  • 属性映射框架-MapStruct
  • 产品规格书写作结构、规范(编写指南)
  • 【MLLM】多模态LLM 2025上半年技术发展(Better、Faster、Stronger)
  • 使用MCP和Ollama本地创建AI代理:实操教程
  • 定制一款国密浏览器(13):预置国密根证书到浏览器
  • |从零开始的Pyside2界面编程|绘图、布局及页面切换
  • 【算法】递归与分治策略
  • C++11 语法特性一文详解
  • MySQL中count(1)和count(*)的区别及细节
  • Redis持久化机制详解