【问题标题】:Unsure how to resolve TypeError: _utils_ipfs__WEBPACK_IMPORTED_MODULE_5__.default.files.add is not a function不确定如何解决 TypeError:_utils_ipfs__WEBPACK_IMPORTED_MODULE_5__.default.files.add 不是函数
【发布时间】:2021-11-10 20:08:21
【问题描述】:

我的 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,因为我在另一篇 Stack Overflow 帖子中看到了该建议作为解决方案,但不幸的是,这并没有奏效。同样,代码曾经完美地工作,所以我不确定这个问题的原因是由于代码的编写方式错误。

感谢您的帮助!如果您需要我详细说明任何事情,请随时询问。

【问题讨论】:

    标签: javascript reactjs webpack typeerror ipfs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2022-10-15
      • 2019-11-02
      • 2018-03-11
      • 2019-05-19
      • 2019-10-31
      • 2020-06-21
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多