Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Client navigation to a server route without a `search` schema throws: args carry `search: undefined`, which JSON arguments reject

Đang mở
#615 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
65/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi

Hướng nghiên cứu

Look at src/serverRouteShared.ts to see how serverRouteArgs always returns search: undefined. Understand the isJSONSafe check in @solidjs/web that rejects undefined. The fix likely involves modifying the router to omit the search key when no schema exists, or adjusting the serialization logic. Test by reproducing the bug with the provided example and verifying client navigation works after changes.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Describe the bug

serverRouteArgs (src/serverRouteShared.ts) always returns { params, search }, and search is undefined when the route declares no search schema. On the client, @solidjs/web sends server function arguments as plain JSON by default. Its isJSONSafe check rejects undefined anywhere in the arguments, so the call throws before any request is made:

Server function arguments are sent as JSON by default and these arguments are not JSON-serializable. Call enableRichArguments() (from "@solidjs/web/server-functions/rich-args") once at startup ...

The route shows the error boundary instead of the page. Server rendering is not affected, because the server calls the function directly, so the first page load works and only client navigation fails. This covers every serverRouteComponent route and every file-system server page that has no search schema, which is the common case.

Your Example Website or App

The code below. I ran it as-is in a Vite start-mode app whose src/app.tsx renders <Router> inside <Loading>.

Steps to Reproduce the Bug or Issue

With @solidjs/router@2.0.0-next.28, @solidjs/web@2.0.0-rc.9 and @solidjs/vite-plugin@3.0.0-next.44 (start: {}, ssr: true, serverFunctions: { components: true }):

import { createRouter, defineRoute, query, serverRouteComponent } from "@solidjs/router";

const home = async () => {
  "use server";
  return () => <a href="/about">About</a>;
};
const about = async () => {
  "use server";
  return () => <p>About</p>;
};

export const Router = createRouter({
  routes: [
    defineRoute({ path: "/", component: serverRouteComponent(query(home, "home")) }),
    defineRoute({ path: "/about", component: serverRouteComponent(query(about, "about")) })
  ]
});
  1. Load /. It renders.
  2. Click the "About" link.
  3. The client throws the error above, and no /_server/data/... request is sent.

Calling enableRichArguments() at startup makes the navigation work, which confirms search: undefined is the only non-JSON value in the arguments.

Expected behavior

Navigating to a server route without a search schema should work with the default JSON argument encoding. The router could leave the search key out when there is no schema. A missing key and an explicit undefined look the same to the server function's destructuring, and the query key only needs the args to be stable. Alternatively, @solidjs/web's isJSONSafe could skip undefined object properties the way JSON.stringify does. The router seems like the smaller fix, since apps shouldn't need rich arguments just to use server routes.

Screenshots or Videos

None.

Platform
  • OS: macOS 15 (Darwin 24.3.0)
  • Browser: Chromium 149 (headless, Playwright)
  • Versions: @solidjs/router@2.0.0-next.28, @solidjs/web@2.0.0-rc.9, solid-js@2.0.0-rc.9, @solidjs/vite-plugin@3.0.0-next.44
Additional context

Using enableRichArguments() as a workaround currently runs into a separate @solidjs/web packaging bug in Vite builds (the rich-args import does not resolve under rolldown), so apps need a resolve alias as well.

Ngôn ngữ chính
TypeScript
Star
1.3k
Fork
180
Merge trung bình
1 ngày 10 giờ
Pull request đã merge (30 ngày)
19

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của solidjs/solid-router

Tất cả issue của solidjs/solid-router

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.