不确定如何解决TypeError: _utils_ipfs__webpack_importted_module_5__



我的React项目出现了一个问题,我以前没有遇到过。我很确定这个问题是在我将React更新到v17.0.0和其他一些库之后开始的。

基本上,我的一个页面有一个用于上传图像的输入,这使得文件进入一个数组缓冲区,以便上传到IPFS。它曾经工作,但我最近再次测试它(在做了一些包/库更新之后,如前所述),它现在给我错误TypeError: _utils_ipfs__WEBPACK_IMPORTED_MODULE_5__.default.files.add is not a function.

为了纠正这个错误,我尝试了npm update以确保一切都是最新的,但这不起作用。

下面是我得到的控制台错误:

getHash NewReview.js:18
NewReview NewReview.js:30
React 5
invokePassiveEffectCreate
callCallback
invokeGuardedCallbackDev
invokeGuardedCallback
flushPassiveEffectsImpl
unstable_runWithPriority scheduler.development.js:468
React 3
runWithPriority$1
flushPassiveEffects
commitBeforeMutationEffects
workLoop scheduler.development.js:417
flushWork scheduler.development.js:390
performWorkUntilDeadline scheduler.development.js:157

以下是我非常确定的NewReview.js与错误相关的部分:

import ipfs from "../utils/ipfs";
export default function NewReview() {
const [ipfsHash, setIpfsHash] = useState("");
const [buffer, setBuffer] = useState(null);
function getHash() {
ipfs.files.add(Buffer.from(buffer), (error, result) => {
if (error) {
console.error(error)
return
}
setIpfsHash(result[0].hash);
}});
useEffect(() => {
if (buffer) {
getHash()
}
});
// ...

ipfs.js是这样的:

const { create } = require('ipfs-http-client');
const ipfs = create({host: 'ipfs.infura.io', port: 5001, protocol: 'https'});
export default ipfs;

作为纠正这个问题的另一个尝试,我尝试使用ipfs.default.files.add,因为我已经看到了建议作为另一个堆栈溢出帖子的解决方案,但不幸的是,这不起作用。同样,代码过去工作得很完美,所以我不确定这个问题的原因是由于代码编写的错误。

谢谢你的帮助!如果你需要我详细说明什么,请尽管开口。

我自己解决了我的问题!这就是问题所在。

TypeError实际上是由我从ipfs-api切换到ipfs-http-client引起的。ipfs.files.add不是ipfs-http-client中的有效函数,这解释了为什么我得到TypeError。我把线路切换到ipfs.add,我能够让它工作。

我还想指出,我必须使用ipfs.add作为async/await函数的一部分,以使其工作,否则它似乎根本不执行。弄清楚这是一个完全不同的问题,我也花了相当多的时间去做。坦率地说,我不认为它需要成为async/await函数的一部分。

最新更新