
在 SvelteKit 中,动态路由段(如 [collections]/)会将参数注入 params 对象,其键名必须与方括号内的字符串完全一致(即 params.collections),而非默认的 params.id;否则 params 将为空或缺失预期属性,导致数据查找失败。
在 sveltekit 中,动态路由参数名称必须与文件夹名严格匹配。你在路由目录中命名为 [collections]/,这意味着 sveltekit 会将该路径段的值作为 params.collections 注入 load 函数——而不是 params.id。因此,原代码中 params.id 始终为 undefined,导致 collections.find(...) 返回 undefined,最终引发 cannot read properties of undefined (reading 'title') 错误。
要修复此问题,请修改 +page.server.js 中的参数访问方式:
// +page.server.js —— 修正后的写法
import { error } from '@sveltejs/kit';
import { collections } from '../data.js';
export function load({ params }) {
// ✅ 正确:使用与文件夹名一致的参数键名
const collection = collections.find((c) => c.id === params.collections);
if (!collection) {
throw error(404, 'Collection not found');
}
return { collection };
}
同时,更新 +page.svelte 中的数据解构和使用方式(推荐使用可选链+默认值提升健壮性):
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
<!-- +page.svelte -->
<script>
export let data;
// 可选:添加类型提示或安全访问
const { collection } = data;
</script><h1>{collection?.title || 'Unknown Collection'}</h1>
<div>{@html collection?.content}</div>
⚠️ 注意事项:
- 动态参数名区分大小写且完全依赖文件夹命名:[id]/ → params.id,[collections]/ → params.collections,[slug]/ → params.slug;
- 若希望语义更清晰(如单个作品 ID),建议将文件夹重命名为 [id]/,并保持逻辑一致性;
- 始终校验查找结果(如添加 if (!collection) throw error(404)),避免服务端返回 undefined 导致客户端渲染崩溃;
- 使用 collection?.title 而非直接访问 data.collection.title,可防止因服务端异常或加载延迟引发的运行时错误。
通过严格匹配参数名与路由段标识符,即可正确解析 URL 路径(如 /art/crisis-vision/),使 load 函数精准获取对应艺术集数据。










