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

Express.js中res.json()未设置Content-Type为application/json问题求助

Express.js中res.json()无法设置Content-Type: application/json的问题解决

问题描述

在Express.js项目中,res.json()默认应自动设置响应头Content-Type: application/json,但实际未生效;即使显式调用res.set('Content-Type', 'application/json')后,响应头仍无该字段。

相关代码

主文件代码

const express =  require('express')
const app = express()
const {products} = require('./data.js')

app.get('/',(req,res)=>{
    res.set('Content-Type', 'application/json');
    res.json(products)
    console.log(products);
})

app.listen(3000,() =>{
    console.log(`Server listening on Port 3000`);
})

data.js代码

const products = [
  {
    id: 1,
    name: 'albany sofa',
    image:
      'https://dl.airtable.com/.attachments/6ac7f7b55d505057317534722e5a9f03/9183491e/product-3.jpg',
    price: 39.95,
    desc: `I'm baby direct trade farm-to-table hell of, YOLO readymade raw denim venmo whatever organic gluten-free kitsch schlitz irony af flexitarian.`,
  },
  {
    id: 2,
    name: 'entertainment center',
    image:
      'https://dl.airtable.com/.attachments/da5e17fd71f50578d525dd5f596e407e/d5e88ac8/product-2.jpg',
    price: 29.98,
    desc: `I'm baby direct trade farm-to-table hell of, YOLO readymade raw denim venmo whatever organic gluten-free kitsch schlitz irony af flexitarian.`,
  },
  {
    id: 3,
    name: 'albany sectional',
    image:
      'https://dl.airtable.com/.attachments/05ecddf7ac8d581ecc3f7922415e7907/a4242abc/product-1.jpeg',
    price: 10.99,
    desc: `I'm baby direct trade farm-to-table hell of, YOLO readymade raw denim venmo whatever organic gluten-free kitsch schlitz irony af flexitarian.`,
  },
  {
    id: 4,
    name: 'leather sofa',
    image:
      'https://dl.airtable.com/.attachments/3245c726ee77d73702ba8c3310639727/f000842b/product-5.jpg',
    price: 9.99,
    desc: `I'm baby direct trade farm-to-table hell of, YOLO readymade raw denim venmo whatever organic gluten-free kitsch schlitz irony af flexitarian.`,
  },
]
const people = [
  { id: 1, name: 'john' },
  { id: 2, name: 'peter' },
  { id: 3, name: 'susan' },
  { id: 4, name: 'anna' },
  { id: 5, name: 'emma' },
]
module.exports = { products, people }

解决方案

  • 移除多余的res.set()调用:res.json()内部会自动设置Content-Type: application/json; charset=utf-8,提前调用res.set()可能触发内部逻辑冲突,直接简化代码:

    app.get('/',(req,res)=>{
        res.json(products)
    })
    
  • 用curl验证真实响应头:浏览器开发者工具可能隐藏部分头信息,用命令行工具确认:

    curl -v http://localhost:3000/
    

    查看输出中是否包含Content-Type: application/json; charset=utf-8。

  • 检查中间件干扰:排查项目中是否使用了compression、helmet或自定义中间件,这些可能修改响应头。比如compression会在压缩响应时重新处理头,确保中间件顺序正确(先加载中间件,再定义路由)。

  • 升级Express版本:旧版Express存在类似bug,升级到最新稳定版:

    npm install express@latest
    
  • 替代方案:用res.send()手动处理:如果上述方法无效,尝试手动序列化并设置头:

    app.get('/',(req,res)=>{
        res.setHeader('Content-Type', 'application/json');
        res.send(JSON.stringify(products));
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:53:24