You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit集成Netlify CMS后无法加载内容,报Cannot read property 'title'错误

问题原因定位

你遇到的报错核心原因是参考了Sapper体系的教程,但SvelteKit的API路由、页面加载逻辑与Sapper存在大量不兼容差异,同时还有配置文件路径错误的问题,具体如下:

1. API端点写法不兼容SvelteKit

Sapper的端点采用Node.js风格的res.writeHead、res.end返回响应,而SvelteKit的API端点要求返回固定格式的对象。你当前的端点写法在SvelteKit中无法正常返回数据,导致请求报500错误,页面拿到的post变量为undefined,直接触发读取title属性失败的报错。
如果你使用的是SvelteKit v1+版本,端点文件应放在src/routes/blog/[slug]/+server.js,正确写法参考:

import path from "path";
import fs from "fs";
import grayMatter from "gray-matter";
import marked from "marked";

const getPost = (fileName) => {
  // 调整路径适配生产环境构建结构
  return fs.readFileSync(
    path.join(process.cwd(), "static/posts/", `${fileName}.md`),
    "utf-8"
  );
};

export async function GET({ params }) {
  const { slug } = params;
  try {
    const post = getPost(slug);
    const renderer = new marked.Renderer();
    const { data, content } = grayMatter(post);
    const html = marked(content, { renderer });
    return new Response(JSON.stringify({ html, ...data }), {
      status: 200,
      headers: {
        "Content-Type": "application/json"
      }
    })
  } catch (e) {
    return new Response(JSON.stringify({
      message: "Not found"
    }), {
      status: 404,
      headers: {
        "Content-Type": "application/json"
      }
    })
  }
}

2. 页面加载逻辑写法不兼容

Sapper的preload方法在SvelteKit中已经替换为load方法,你当前页面的preload逻辑不会正常执行,无法给post变量赋值,也是导致post为undefined的核心原因之一。
正确的页面加载逻辑写法参考:

<script context="module">
  export async function load({ fetch, params }) {
    const res = await fetch(`/blog/${params.slug}.json`);
    const data = await res.json();
    if (res.status === 200) {
      return {
        post: data
      };
    } else {
      return {
        status: res.status,
        error: new Error(data.message)
      };
    }
  }
</script>

<script>
  export let post;
</script>

<!-- 剩余样式、页面结构部分保持不变即可 -->

3. Netlify CMS配置文件路径错误

控制台报错提示Failed to load config.yml (500),Netlify CMS要求配置文件必须放在站点根路径,也就是你项目的static/config.yml位置,不能放在blog子目录下,调整文件位置即可解决该报错。

4. 可选优化:调整markdown文件存储位置

当前你把markdown存在static/posts目录下,部署到Netlify后这些文件会被当作静态资源对外暴露,存在不必要的资源泄露风险。建议把markdown文件迁移到src/content目录下,读取时路径调整为path.join(process.cwd(), 'src/content', ${fileName}.md)即可。


内容的提问来源于stack exchange,提问作者Alexander Hemming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:48:00