我遇到了一个问题,当我使用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
1条答案
按热度按时间b1zrtrql1#
我发现了问题
我发现,当我使用
ref
函数定义filesRef变量时,忘记定义storage
属性。原始定义(不完整):
新定义(工作):
我认为这是一个小问题,因为我花了几个小时来寻找这个bug。我感到困惑的是,它只会导致
listAll
函数中的错误,而不是与ref
函数中缺少的存储参数有关的错误。我进一步感到困惑的是,它引用了浏览器中的location
变量,好像它需要检查路径是否为根。但是如果缺少storage属性,则无法执行此操作。我还知道isRoot
不是location API的一部分,因此可能Firebase扩展了location API?我使用devTools查找了脚本,其类型为window.location,因此可能Firebase应该对此添加一个检查。如果这是JavaScript中不会发生的错误,因为我使用的是Typescript,但我非常怀疑这是问题所在,因为Typescript是编译成普通JS的。