Skip to content

fix: pages 404#1094

Open
ThibaudDauce wants to merge 3 commits into
mainfrom
fix_pages_404
Open

fix: pages 404#1094
ThibaudDauce wants to merge 3 commits into
mainfrom
fix_pages_404

Conversation

@ThibaudDauce
Copy link
Copy Markdown
Contributor

@ThibaudDauce ThibaudDauce commented May 21, 2026

Also fix the routing after a 404 (two different way, static error and error from useFetch) :

@ThibaudDauce ThibaudDauce marked this pull request as ready for review May 26, 2026 07:46
@nicolaskempf57
Copy link
Copy Markdown
Contributor

I'm getting strange stacktraces like

 WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/sfdfdfsf"                           2:43:24 PM
 WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/sfdfdfsf"                           2:43:24 PM
 WARN  [Vue warn]: Invalid vnode type when creating vnode: undefined. at <[...slug]>                                 2:43:25 PM
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 WARN  [Vue warn]: Component <Anonymous> is missing template or render function. at <Anonymous>                      2:43:25 PM
at <[...slug]>
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 WARN  [Vue warn]: Invalid vnode type when creating vnode: undefined. at <[...slug]>                                 2:43:25 PM
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 WARN  [Vue warn]: Component <Anonymous> is missing template or render function. at <Anonymous>                      2:43:25 PM
at <[...slug]>
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 ERROR  [request error] [fatal] [GET] http://dev.local:3000/pages/sfdfdfsf                                           2:43:25 PM


ℹ Error: Page Not Found

 ⁃ at createError (node_modules/h3/dist/index.mjs:71:15)
 ⁃ at createError (node_modules/nuxt/dist/app/composables/error.js:45:58)
 ⁃ at setup (pages/pages/[...slug].vue:40:50)

   35 ┃  import { LoadingBlock, markdownClasses, MarkdownViewer } from '@datagouv/components-next'
   36 ┃  import Breadcrumb from '~/components/Breadcrumb/Breadcrumb.vue'
   37 ┃  import BreadcrumbItem from '~/components/Breadcrumbs/BreadcrumbItem.vue'
   38 ┃
   39 ┃  const route = useRoute()
 ❯ 40 ┃  const siteConfig = useSiteConfig()
   41 ┃
   42 ┃  // An empty slug (/pages) is not a valid page: return a clean 404 right away.
   43 ┃  // Fetching it would build the URL /nuxt-api/pages/ whose trailing slash gets
   44 ┃  // 308-redirected, which ofetch follows without raising an error.
   45 ┃  const slug = route.params.slug ? (route.params.slug as string[]).join('/') : ''


[CAUSE]
{
  statusCode: 404,
  statusMessage: 'Page Not Found',
  fatal: true,
}

and

 WARN  [Vue warn]: Invalid vnode type when creating vnode: undefined. at <[...slug]>                                 2:49:42 PM
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 WARN  [Vue warn]: Component <Anonymous> is missing template or render function. at <Anonymous>                      2:49:42 PM
at <[...slug]>
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 WARN  [Vue warn]: Invalid vnode type when creating vnode: undefined. at <[...slug]>                                 2:49:42 PM
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 WARN  [Vue warn]: Component <Anonymous> is missing template or render function. at <Anonymous>                      2:49:42 PM
at <[...slug]>
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
 ERROR  [request error] [fatal] [GET] http://dev.local:3000/pages                                                    2:49:42 PM


ℹ Error: Page Not Found

 ⁃ at createError (node_modules/h3/dist/index.mjs:71:15)
 ⁃ at createError (node_modules/nuxt/dist/app/composables/error.js:45:58)
 ⁃ at setup (pages/pages/[...slug].vue:36:50)

   31 ┃    </div>
   32 ┃  </template>
   33 ┃
   34 ┃  <script setup lang="ts">
   35 ┃  import { LoadingBlock, markdownClasses, MarkdownViewer } from '@datagouv/components-next'
 ❯ 36 ┃  import Breadcrumb from '~/components/Breadcrumb/Breadcrumb.vue'
   37 ┃  import BreadcrumbItem from '~/components/Breadcrumbs/BreadcrumbItem.vue'
   38 ┃
   39 ┃  const route = useRoute()
   40 ┃  const siteConfig = useSiteConfig()
   41 ┃

 ⁃ at _sfc_main.setup (pages/pages/[...slug].vue:185:23)
 ⁃ at callWithErrorHandling (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:200:19)
 ⁃ at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:8071:25)
 ⁃ at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:8033:36)
 ⁃ at renderComponentVNode (node_modules/@vue/server-renderer/dist/server-renderer.cjs.js:675:15)
 ⁃ at renderVNode (node_modules/@vue/server-renderer/dist/server-renderer.cjs.js:809:14)
 ⁃ at renderComponentSubTree (node_modules/@vue/server-renderer/dist/server-renderer.cjs.js:760:7)

[CAUSE]
{
  statusCode: 404,
  statusMessage: 'Page Not Found',
  fatal: true,
}
 ERROR  [request error] [fatal] [GET] http://dev.local:3000/pages                                                    2:49:43 PM


ℹ Error: Page Not Found

 ⁃ at createError (node_modules/h3/dist/index.mjs:71:15)
 ⁃ at createError (node_modules/nuxt/dist/app/composables/error.js:45:58)
 ⁃ at setup (pages/pages/[...slug].vue:36:50)

Previous one was :

WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/"                                   3:01:29 PM
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/"                                   3:01:29 PM
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/"                                   3:01:29 PM
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/"                                   3:01:29 PM
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages"                                    3:01:29 PM
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages"                                    3:01:29 PM
WARN  [Vue warn]: Component <Anonymous> is missing template or render function. at <Anonymous>                      3:01:29 PM
at <LoadingBlock>
at <[...slug]>
at <RouteProvider>
at <RouterView>
at <NuxtPage>
at <Default>
at <AsyncComponentWrapper>
at <LayoutLoader>
at <NuxtLayoutProvider>
at <NuxtLayout>
at <App>
at <NuxtRoot>
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages"                                    3:01:29 PM
WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages"                                    3:01:29 PM
[3:01:29 PM]  WARN  [nuxt-og-image] Failed to extract SEO props from head entries Cannot read properties of undefined (reading 'title')

   at ComputedRefImpl.fn (pages/pages/[...slug].vue:32:76)
   at refreshComputed (node_modules/@vue/reactivity/dist/reactivity.cjs.js:408:28)
   at get value (node_modules/@vue/reactivity/dist/reactivity.cjs.js:1729:5)
   at unref (node_modules/@vue/reactivity/dist/reactivity.cjs.js:1554:45)
   at toValue (node_modules/@vue/reactivity/dist/reactivity.cjs.js:1557:49)
   at extractHeadSeoProps (node_modules/nuxt-og-image/dist/runtime/app/utils.js:47:52)
   at meta (node_modules/nuxt-og-image/dist/runtime/app/utils.js:98:26)
   at walkResolver (node_modules/unhead/dist/shared/unhead.B5FWS6X0.mjs:72:13)
   at walkResolver (node_modules/unhead/dist/shared/unhead.B5FWS6X0.mjs:82:17)
   at normalizeEntryToTags (node_modules/unhead/dist/shared/unhead.B5FWS6X0.mjs:197:11)
[3:01:29 PM]  WARN  [nuxt-og-image] Failed to extract SEO props from head entries Cannot read properties of undefined (reading 'title')

   at ComputedRefImpl.fn (pages/pages/[...slug].vue:32:76)
   at refreshComputed (node_modules/@vue/reactivity/dist/reactivity.cjs.js:408:28)
   at get value (node_modules/@vue/reactivity/dist/reactivity.cjs.js:1729:5)
   at unref (node_modules/@vue/reactivity/dist/reactivity.cjs.js:1554:45)
   at toValue (node_modules/@vue/reactivity/dist/reactivity.cjs.js:1557:49)
   at extractHeadSeoProps (node_modules/nuxt-og-image/dist/runtime/app/utils.js:47:52)
   at meta (node_modules/nuxt-og-image/dist/runtime/app/utils.js:98:26)
   at walkResolver (node_modules/unhead/dist/shared/unhead.B5FWS6X0.mjs:72:13)
   at walkResolver (node_modules/unhead/dist/shared/unhead.B5FWS6X0.mjs:82:17)
   at normalizeEntryToTags (node_modules/unhead/dist/shared/unhead.B5FWS6X0.mjs:197:11)
[3:01:29 PM]  WARN  [nuxt] Failed to stringify dev server logs. Received DevalueError: Cannot stringify arbitrary non-POJOs. You can define your own reducer/reviver for rich types following the instructions in https://nuxt.com/docs/4.x/api/composables/use-nuxt-app#payload.

and

ERROR  [request error] [unhandled] [GET] http://dev.local:3000/nuxt-api/pages/scoubidou                             3:02:40 PM


ℹ Error: [GET] "https://raw.githubusercontent.com/datagouv/datagouvfr-pages/master/pages/scoubidou.html": 404 Not Found

 ⁃ at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
 ⁃ at async $fetch2 (node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs:332:15)
 ⁃ at async cachedEventHandler.maxAge (.nuxt/dev/sentry.server.config.mjs:10261:20)

   10256 ┃    } catch {
   10257 ┃      extension = "html";
   10258 ┃    }
   10259 ┃    rawUrl = ${rawUrl}.${extension};
   10260 ┃    ghUrl = ${ghUrl}.${extension};
 ❯ 10261 ┃    const response = await ofetch(rawUrl, {
   10262 ┃      timeout: 5e3
   10263 ┃    });
   10264 ┃    const content = matter(response);
   10265 ┃    return {
   10266 ┃      ghUrl,

 ⁃ (async file://.nuxt/dev/sentry.server.config.mjs:634:20)
 ⁃ at async _resolve (.nuxt/dev/sentry.server.config.mjs:432:23)
 ⁃ at async get (.nuxt/dev/sentry.server.config.mjs:460:7)
 ⁃ (async file://.nuxt/dev/sentry.server.config.mjs:480:19)
 ⁃ at async Object.handler (.nuxt/dev/sentry.server.config.mjs:674:22)
 ⁃ (async file://node_modules/h3/dist/index.mjs:2017:19)
 ⁃ (async file://.nuxt/dev/sentry.server.config.mjs:2735:18)

[CAUSE]
FetchError {
  stack: '[GET] "https://raw.githubusercontent.com/datagouv/datagouvfr-pages/master/pages/scoubidou.html": 404 Not Found\n' +
  '    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n' +
  'at async $fetch2 (./node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs:332:15)\n' +
  'at async cachedEventHandler.maxAge (./.nuxt/dev/sentry.server.config.mjs:10261:20)\n' +
  'at async file://./.nuxt/dev/sentry.server.config.mjs:634:20)\n' +
  'at async _resolve (./.nuxt/dev/sentry.server.config.mjs:432:23)\n' +
  'at async get (./.nuxt/dev/sentry.server.config.mjs:460:7)\n' +
  'at async file://./.nuxt/dev/sentry.server.config.mjs:480:19)\n' +
  'at async Object.handler (./.nuxt/dev/sentry.server.config.mjs:674:22)\n' +
  'at async file:'... 195 more characters,
  message: '[GET]
  "https://raw.githubusercontent.com/datagouv/datagouvfr-pages/master/pages/scoubidou.html":
  404 Not Found',
  name: 'FetchError',
  request: [Getter]
  options: [Getter]
  response: [Getter]
  data: [Getter]
  status: [Getter]
  statusCode: [Getter]
  statusText: [Getter]
  statusMessage: [Getter]
}
 WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/scoubidou"                          3:02:40 PM
 WARN  [Vue Router warn]: No match found for location with path "/nuxt-api/pages/scoubidou"                          3:02:40 PM
 ERROR  [request error] [unhandled] [GET] http://dev.local:3000/nuxt-api/pages/scoubidou

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Corriger la gestion des slugs non existants sur /pages/

2 participants