🐙
Nuxt3でQueryが勝手にデコードされる!stringifyQueryでハマった話
こんにちは。Nuxt2とNuxt3のstringifyQuery
でハマったので、挙動の違いについて整理したいと思います。
情報は、執筆時点の話です。Nuxtのバージョンは3.0.0-rc.8
です。
何にハマったか?
Nuxt2では、クエリに=
がエンコードされた%3D
が入ってても、そのまま%3D
で表示されるのに、
Nuxt3では、=
にデコードされてしまうことです。
下の2つの動画を見てください。上がNuxt2、下がNuxt3です。
原因
Vue RouterのプロパティstringifyQuery
です。
Nuxt2
- nuxt.config.jsで設定できます。デフォルトでは何も設定されていない模様??
- (なので、クエリが勝手にデコードされませんでした)
nuxt.config.js
export default {
...
router: {
stringifyQuery: () => {
...
}
}
}
Nuxt3
- プロジェクトルートにappディレクトリを作成し、router.options.tsを作成し、その中で関数をカスタムします。
- 今回は以下のように対応しました。
app/router.options.ts
import type { RouterConfig } from '@nuxt/schema'
// https://router.vuejs.org/api/interfaces/routeroptions.html
export default <RouterConfig>{
stringifyQuery: (query) => {
const keys = Object.keys(query)
return keys.map(key => `${key}=${encodeURIComponent(query[key] as string)}`).join('&')
}
}
対応結果
Nuxt3でもクエリが勝手にデコードされなくなりました。
Discussion