如何修复错误TypeError:无法访问属性“isRoot”,位置在Firebase中未定义?

beq87vna  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(109)

我遇到了一个问题,当我使用firebase存储时,我得到了错误:
TypeError:无法访问属性“isRoot”,位置未定义
我用的是SvelteKit,在onMount调用中测试过(因为location是浏览器对象),也检查过浏览器表单$app/environment,发现错误是这几行引起的,我相信是listAll函数:

listAll(filesRef).then((list)=>{
    list.items.forEach(item=>{
        files.push({
            filetype:item.name.split(".").at(-1).toString(),
            name:item.name
       });
    });
});

对于上下文,files变量是一个对象列表,包含filetype和filename。
如果有帮助的话,下面是整个回溯过程:

list$2 requests.ts:182
    list$1 reference.ts:406
    listAllHelper reference.ts:361
    listAll$1 reference.ts:343
    listAll api.ts:257
    instance +page.svelte:58
    init index.mjs:2002
    Page +page.svelte:791
    createProxiedComponent svelte-hooks.js:341
    ProxyComponent proxy.js:242
    Proxy<+page> proxy.js:349
    construct_svelte_component_dev index.mjs:2218
    update root.svelte:274
    update_slot_base index.mjs:98
    update +layout.svelte:154
    update index.mjs:1193
    flush index.mjs:1160
    promise callback*schedule_update index.mjs:1118
    make_dirty index.mjs:1970
    ctx index.mjs:2008
    $$set root.svelte:581
    get proxy.js:83
    $set index.mjs:2109
    key proxy.js:46
    update client.js:320
    navigate client.js:1077
    goto client.js:182
    goto client.js:1249
    gotoNext +page.svelte:11
    instance +page.svelte:18
    registerStateListener auth_impl.ts:565
    promise callback*registerStateListener auth_impl.ts:565
    onAuthStateChanged auth_impl.ts:407
    onAuthStateChanged index.ts:128
    instance +page.svelte:17
    run index.mjs:18
    mount_component index.mjs:1939
    flush index.mjs:1175
    promise callback*schedule_update index.mjs:1118
    make_dirty index.mjs:1970
    ctx index.mjs:2008
    $$set root.svelte:581
    get proxy.js:83
    $set index.mjs:2109
    key proxy.js:46
    update client.js:320
    navigate client.js:1077
    goto client.js:182
    goto client.js:1249
    default Goto.ts:3
    instance +page.svelte:14
    run index.mjs:18
    mount_component index.mjs:1939
    flush index.mjs:1175
    init index.mjs:2034
    Root root.svelte:633
    createProxiedComponent svelte-hooks.js:341
    ProxyComponent proxy.js:242
    Proxy<Root> proxy.js:349
    initialize client.js:374
    _hydrate client.js:1630
    start start.js:39
    <anonymous> [page]:10039
b1zrtrql

b1zrtrql1#

我发现了问题

我发现,当我使用ref函数定义filesRef变量时,忘记定义storage属性。

原始定义(不完整):
let filesRef = ref(`/user-generated/${$user.uid}`);
新定义(工作):
const storage = getStorage(app);
let filesRef = ref(storage, `/user-generated/${$user.uid}`);

我认为这是一个小问题,因为我花了几个小时来寻找这个bug。我感到困惑的是,它只会导致listAll函数中的错误,而不是与ref函数中缺少的存储参数有关的错误。我进一步感到困惑的是,它引用了浏览器中的location变量,好像它需要检查路径是否为根。但是如果缺少storage属性,则无法执行此操作。我还知道isRoot不是location API的一部分,因此可能Firebase扩展了location API?我使用devTools查找了脚本,其类型为window.location,因此可能Firebase应该对此添加一个检查。如果这是JavaScript中不会发生的错误,因为我使用的是Typescript,但我非常怀疑这是问题所在,因为Typescript是编译成普通JS的。

相关问题