You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js返回对象为字符串的原因及res.send返回对象的解决方法

为什么Express的res.send()返回数组变成了字符串?

这是个很常见的Express新手问题,我来给你拆解一下原因和解决办法:

问题原因

Express的res.send()方法会根据你传入的参数类型,自动推断响应的Content-Type并处理内容:

  • 当传入普通对象时,它会默认序列化为JSON,设置Content-Type: application/json;
  • 但当传入数组的时候,它会把数组当成HTML片段处理——把数组元素用逗号拼接成字符串,然后设置Content-Type: text/html,这就导致调用端收到的是纯文本字符串,而不是JSON数组。

解决办法

有两种简单可靠的方式来正确返回JSON格式的数组:

方法1:使用res.json()(推荐)

Express专门提供了res.json()方法来处理JSON响应,不管你传入的是数组还是对象,它都会自动完成JSON序列化,并且设置正确的响应头。修改你的代码只需要把res.send()换成res.json():

const express = require('express');
const router = express.Router();
router.get('/', async function (req, res, next) {
  const cars = ["Saab", "Volvo", "BMW"];
  res.json(cars); // 替换为res.json
})

这个方法是Express官方推荐的,因为它处理了很多细节,比如自动处理空值、循环引用(虽然数组一般不会有),比手动处理更省心。

方法2:手动设置响应头并序列化(不推荐,但了解也有用)

如果你一定要用res.send(),可以手动把数组转成JSON字符串,同时设置Content-Type为application/json:

const express = require('express');
const router = express.Router();
router.get('/', async function (req, res, next) {
  const cars = ["Saab", "Volvo", "BMW"];
  res.setHeader('Content-Type', 'application/json');
  res.send(JSON.stringify(cars));
})

不过这种方式需要自己处理序列化,不如res.json()简洁,所以一般没必要这么做。

内容的提问来源于stack exchange,提问作者chaitu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:47:29