合约已部署但运行脚本报错 IPFS文件固定失败配置缺失问题排查
错误根因分析
- 核心问题是项目依赖的
node-config包加载配置失败,导致脚本调用Pinata上传文件到IPFS的请求地址、Pinata API密钥、Pinata API密钥对全部未被正确赋值,取值为undefined - 直接触发报错的原因是axios发送请求时,必填的url参数为undefined,不符合字符串类型要求,抛出
ERR_INVALID_ARG_TYPE错误 - 日志开头的警告已经明确给出前置原因:当前
NODE_ENV被设置为dev,但项目根目录下的config文件夹中没有匹配的配置文件,也没有默认配置文件,所有从配置中读取的变量均为空值
解决步骤
- 首先在项目根目录创建
config文件夹(如果该目录不存在) - 在
config文件夹下新建dev.js或default.js配置文件,填入以下必填配置,替换为你自己的Pinata账号信息:
module.exports = { pinata: { apiKey: "你的Pinata API Key", apiSecret: "你的Pinata API Secret", uploadUrl: "https://api.pinata.cloud/pinning/pinFileToIPFS" } // 其余脚本需要的配置项可同步补充在此处 }
- 确认
script/runScript.js中读取配置的字段和配置文件中的字段保持一致,读取配置的代码参考如下:
const config = require('config') const pinataApiKey = config.get('pinata.apiKey') const pinataApiSecret = config.get('pinata.apiSecret') const pinataUploadUrl = config.get('pinata.uploadUrl')
- 重新执行
node script/runScript.js即可正常运行
如果仅需临时测试功能,也可以直接在runScript.js中对上述三个变量硬编码赋值,后续再改为配置读取的规范写法。
内容的提问来源于stack exchange,提问作者Dami The
相关产品推荐
相关产品推荐

