SvelteKit: "Error: request.query has been replaced by request.url.searchParams"
SvelteKit: "Error: request.query has been replaced by request.url.searchParams"
我想在 MacOs 11.5.2 上试用 SvelteKit。使用节点 v16.13.1,npm 8.1.2.
我已经按照原始指南安装了 SvelteKit:
npm init svelte@next my-app
cd my-app
npm install
npm run dev -- --open
然后,当 localhost:3000 打开时,我得到这个错误:
**Error: request.query has been replaced by request.url.searchParams**
at Object.get (file:///Web/Svelte_30-12-21/my-app/node_modules/@sveltejs/kit/dist/ssr.js:1753:12)
at Object.handle (/Web/Svelte_30-12-21/my-app/src/hooks.ts:10:30)
at respond (file:///Web/Svelte_30-12-21/my-app/node_modules/@sveltejs/kit/dist/ssr.js:1764:30)
at svelteKitMiddleware (file:///Web/Svelte_30-12-21/my-app/node_modules/@sveltejs/kit/dist/chunks/index.js:4577:28)
可能是什么问题?
我运行陷入同样的问题。在 src/hooks.js
中替换
const method = request.query.get('_method');
和
const method = request.method;
如果您正在使用 npm init svelte@next my-app
并使用演示应用程序,您也会 运行 遇到 Header.svelte
中的问题。
替换
<li class:active={$page.path === '/'}><a sveltekit:prefetch href="/">Home</a></li>
<li class:active={$page.path === '/about'}><a sveltekit:prefetch href="/about">About</a></li>
<li class:active={$page.path === '/todos'}><a sveltekit:prefetch href="/todos">Todos</a></li>
和
<ul>
<li class:active={$page.url.pathname === '/'}><a sveltekit:prefetch href="/">Home</a></li>
<li class:active={$page.url.pathname === '/about'}>
<a sveltekit:prefetch href="/about">About</a>
</li>
<li class:active={$page.url.pathname === '/todos'}>
<a sveltekit:prefetch href="/todos">Todos</a>
</li>
</ul>
该问题已在今天早些时候的提交中引入 reported。它已经修复,运行 npm update
或删除您的 node_modules
目录并重新安装。
在我的例子中(SvelteKit next 160)它与@klequis 的回答不同。 src/hooks.js
包含此代码块
这个问题的解决方案实际上是完全删除这个 if 块。
我删除了它,并通过记录输出 console.log(request.method)
输出确认不再需要此分配:GET
未经测试的代码。
// TODO https://github.com/sveltejs/kit/issues/1046
const searchParams = new URL(event.request.url).searchParams;
if (searchParams.has('_method')) {
event.request = new Request({ ...event.request, method: searchParams.get('_method').toUpperCase()||''}) ;
}
我想在 MacOs 11.5.2 上试用 SvelteKit。使用节点 v16.13.1,npm 8.1.2.
我已经按照原始指南安装了 SvelteKit:
npm init svelte@next my-app
cd my-app
npm install
npm run dev -- --open
然后,当 localhost:3000 打开时,我得到这个错误:
**Error: request.query has been replaced by request.url.searchParams**
at Object.get (file:///Web/Svelte_30-12-21/my-app/node_modules/@sveltejs/kit/dist/ssr.js:1753:12)
at Object.handle (/Web/Svelte_30-12-21/my-app/src/hooks.ts:10:30)
at respond (file:///Web/Svelte_30-12-21/my-app/node_modules/@sveltejs/kit/dist/ssr.js:1764:30)
at svelteKitMiddleware (file:///Web/Svelte_30-12-21/my-app/node_modules/@sveltejs/kit/dist/chunks/index.js:4577:28)
可能是什么问题?
我运行陷入同样的问题。在 src/hooks.js
中替换
const method = request.query.get('_method');
和
const method = request.method;
如果您正在使用 npm init svelte@next my-app
并使用演示应用程序,您也会 运行 遇到 Header.svelte
中的问题。
替换
<li class:active={$page.path === '/'}><a sveltekit:prefetch href="/">Home</a></li>
<li class:active={$page.path === '/about'}><a sveltekit:prefetch href="/about">About</a></li>
<li class:active={$page.path === '/todos'}><a sveltekit:prefetch href="/todos">Todos</a></li>
和
<ul>
<li class:active={$page.url.pathname === '/'}><a sveltekit:prefetch href="/">Home</a></li>
<li class:active={$page.url.pathname === '/about'}>
<a sveltekit:prefetch href="/about">About</a>
</li>
<li class:active={$page.url.pathname === '/todos'}>
<a sveltekit:prefetch href="/todos">Todos</a>
</li>
</ul>
该问题已在今天早些时候的提交中引入 reported。它已经修复,运行 npm update
或删除您的 node_modules
目录并重新安装。
在我的例子中(SvelteKit next 160)它与@klequis 的回答不同。 src/hooks.js
包含此代码块
这个问题的解决方案实际上是完全删除这个 if 块。
我删除了它,并通过记录输出 console.log(request.method)
输出确认不再需要此分配:GET
未经测试的代码。
// TODO https://github.com/sveltejs/kit/issues/1046
const searchParams = new URL(event.request.url).searchParams;
if (searchParams.has('_method')) {
event.request = new Request({ ...event.request, method: searchParams.get('_method').toUpperCase()||''}) ;
}