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

使用Express.js构建API并通过前端JS调用的技术问题咨询

解决Express.js API返回Text/HTML而非JSON的问题

嘿,我看你在搭建Express API时遇到了响应类型不符的问题——前端调用后拿到的是Text/HTML格式,而非预期的JSON。从你贴的代码片段来看,你已经尝试手动设置Content-Type头了,但大概率是返回数据的方式或逻辑存在疏漏,给你几个实用的解决思路:

  • 换用res.json()代替手动设置响应头
    Express自带的res.json()方法会自动帮你设置Content-Type: application/json响应头,比手动写res.header()再发送数据靠谱得多,还能自动把JavaScript对象序列化成JSON字符串。把你的onScan函数改成这样试试:

    function onScan(err, data) {
      if (err) {
        console.error("Unable to read: ", JSON.stringify(err, null, 2));
        // 错误场景也返回JSON格式的错误信息
        return res.status(500).json({ 
          message: "Failed to fetch accounts", 
          error: err.message 
        });
      }
      // 直接返回扫描到的账户数据
      res.json(data.Items);
    }
    

    这样就不用纠结手动设置头会不会生效的问题了。

  • 检查中间件的顺序是否正确
    如果你的项目里用了静态文件中间件(比如app.use(express.static('public'))),一定要确保API路由的定义在静态中间件之前。要是API路由写在后面,可能会被静态文件路由匹配到,返回对应的HTML文件,这就会导致响应类型变成Text/HTML。

  • 前端请求时明确指定Accept头
    在前端调用API的时候,主动告诉服务器你要JSON格式的响应,比如用fetch的话:

    fetch('/your-api-path', {
      headers: {
        'Accept': 'application/json'
      }
    })
    .then(res => res.json())
    .then(data => {
      // 处理拿到的JSON数据
    })
    .catch(err => console.error('请求出错:', err));
    

    这一步相当于给服务器发个明确的“指令”,避免因为服务器端的响应头设置疏漏导致格式不对。

  • 补全未完成的代码逻辑
    你贴的代码里return d...明显是没写完的,一定要确保onScan函数的逻辑是完整的——不管成功还是失败,都要调用res.json()或者res.send()来结束响应,不能中途中断或者没有返回任何内容,否则Express可能会默认返回一些奇怪的响应类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:27