Express路由中使用Axios返回特殊字符而非JSON的问题求助
问题解决:Axios请求Moralis API返回乱码数据
问题本质
你看到的特殊字符是Gzip压缩后的原始响应内容。Moralis API默认返回gzip压缩数据,但你的Node.js端Axios未配置自动解压,导致直接读取了压缩字节流,而非解析后的JSON。
修复方案
修改Axios请求配置,明确接受压缩编码并开启自动解压:
修改后的路由代码
import express from "express"; import axios from 'axios'; import { chainIdAliases } from "../constants"; import { envVars } from "../server"; const moralis = express.Router(); moralis.get('/get_user_tokens/', async (req, res) => { try { const { address, chainId } = req.query as { address: string; chainId: string }; const options = { method: 'GET', url: `https://deep-index.moralis.io/api/v2/${address}/erc20`, params: { chain: chainIdAliases[chainId] }, headers: { accept: 'application/json', 'X-API-Key': envVars.MORALIS, 'Accept-Encoding': 'gzip, deflate' }, decompress: true // 启用自动解压 }; const response = await axios.request(options); res.status(200).json(response.data); } catch (error) { const errMsg = error instanceof Error ? error.message : '请求Moralis API失败'; res.status(400).json({ error: errMsg }); } }); export default moralis
补充说明
- 客户端正常是因为浏览器/前端请求库默认会自动处理gzip解压,无需额外配置。
- Body-parser仅负责解析请求体,和响应压缩无关,排除该组件问题。
- 若怀疑Helmet影响,可临时注释测试,但上述配置已覆盖该场景。
内容的提问来源于stack exchange,提问作者lux
相关产品推荐
相关产品推荐

