Axios代理请求API报UNABLE_TO_VERIFY_LEAF_SIGNATURE错误求解
问题根因
报错UNABLE_TO_VERIFY_LEAF_SIGNATURE是Node.js发起HTTPS请求时无法验证目标站点SSL证书合法性导致的,你代码里配置的跳过证书校验规则没有生效,核心原因是传参错误:新版Axios要求HTTPS代理实例通过httpsAgent字段传入,直接写agent不会被识别,同时你的代码还存在依赖未引入、响应未透传给前端的问题。
修复方案
按以下步骤调整代码即可:
- 补全缺失的
express、cors、axios依赖引入,否则运行时会直接报变量未定义错误 - 修正Axios的代理配置字段,把原来的
agent改为httpsAgent,确保跳过证书校验的规则生效 - 增加Node环境变量兜底配置,避免本地环境证书链缺失导致的校验失败(仅本地开发可用)
- 补全响应逻辑,把API返回的结果透传给前端请求,不要只打印在服务端控制台
修正后可直接运行的代码
const express = require('express'); const cors = require('cors'); const axios = require('axios'); const https = require("https"); const app = express(); app.use(cors()); // 本地开发临时关闭SSL证书校验,生产环境禁止使用该配置 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; const httpsAgent = new https.Agent({ rejectUnauthorized: false, }); // 替换为你自己申请的有效API密钥 const API_KEY = '请填入你的实际API_KEY'; app.get("/words", async (req, res) => { try { const apiRes = await axios.get( `https://krdict.korean.go.kr/api/search?certkey_no=4013&key=${API_KEY}&type_search=search&part=word&q=%EB%82%98%EB%AC%B4&sort=dict`, { httpsAgent, timeout: 10000 } ); res.status(200).send(apiRes.data); } catch (err) { console.error('代理请求失败:', err.message); res.status(500).send({ msg: '代理请求接口失败' }); } }); app.listen(3000, () => console.log('代理服务启动成功,监听端口3000'));
补充说明
- 不要在生产环境关闭SSL证书校验,如果后续需要部署服务,可手动将目标API站点的完整证书链添加到Node.js的信任证书目录,即可在开启校验的情况下正常请求
- 前端本地调试时,将词典接口的请求地址改为
http://localhost:3000/words即可解决CORS跨域问题 - 不要把API密钥写在前端代码中,所有携带密钥的请求都通过当前代理服务转发,避免密钥泄露
内容的提问来源于stack exchange,提问作者José Carlos
相关产品推荐
相关产品推荐

