Nestjs中使用Axios发起HTTPS请求出现Agent报错如何解决
报错原因与修复方案
你遇到的Cannot read property 'Agent' of undefined报错和NestJS配置无关,是helper文件未正确导入Node.js内置https模块导致的。
第一步:修复导入问题
在helper文件顶部添加对应导入语句即可解决该报错:
- 如果使用TS/ESModule规范:
import * as https from 'https';
- 如果使用CommonJS规范:
const https = require('https');
证书验证问题处理
你当前使用rejectUnauthorized: false只是临时绕过验证逻辑,存在安全风险,生产环境推荐使用以下两种更稳妥的方案:
方案1:单请求配置自定义CA证书
将目标服务的根证书文件放到项目目录中,读取后传入httpsAgent配置即可:
import * as https from 'https'; import * as fs from 'fs'; import axios from 'axios'; export async function getTestData(): Promise<any> { // 替换为你的CA证书实际存储路径 const caCert = fs.readFileSync('./assets/target-service-ca.crt'); const result = await axios({ url: tempURL, method: 'GET', timeout: 3000, httpsAgent: new https.Agent({ ca: caCert }), }); return result.data; }
方案2:全局配置Node.js信任证书
启动NestJS服务时添加NODE_EXTRA_CA_CERTS环境变量,指定证书路径,所有Node.js发起的HTTPS请求都会自动信任该证书,不需要单独修改Axios请求配置:
# Linux/macOS 启动命令示例 NODE_EXTRA_CA_CERTS=./assets/target-service-ca.crt npm run start:prod # Windows cmd 启动命令示例 set NODE_EXTRA_CA_CERTS=./assets/target-service-ca.crt && npm run start:prod
补充说明
Postman请求正常是因为Postman默认信任系统根证书,也支持用户手动导入信任自签名证书,和NestJS本身的配置没有关系。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

