Sveltekit 静态网站博客显示按客户端当前日期过滤的数据

Sveltekit static website blog show data filtered on client current date

提问人:Dimebag 提问时间:11/9/2023 最后编辑:Dimebag 更新时间:11/9/2023 访问量:17

问:

免责声明:我是一名非网络工程师,试图使用 sveltekit 建立个人博客。

我想要什么:一个静态博客(目前托管在github页面上)。我想提前写博客文章,让它们只在达到发布日期时显示,例如,我将发布日期设置为 2023-11-01,那么只有在从该日期开始重新加载页面时才会显示。

这可能吗?如何?

法典:

-- svelte.config.js
import adapter from '@sveltejs/adapter-static';

const config = {
    ...
    kit: {
        adapter: adapter(),
    }
}

-- +layout.ts
export const prerender = true;

-- BlogPosts.svelte
<script>
    export let posts: BlogPost[];
</script>

<section>
    <ul class="posts">
        {#each posts as post}
            <li class="post">
                <a href={post.slug} class="title">{post.title}</a>
                ...
            </li>
        {/each}
    </ul>
</section>

-- +page.svelte
<script>
    export let data;
</script>

<BlogPostList posts={data.postsAsOfToday} />

-- +page.ts
export async function load({ fetch }) {
    // the endpoint simply returns all blogposts from markdown files in the same repo
    const response = await fetch(base + '/api/blog');
    const posts: BlogPost[] = await response.json();
    const dateToday = new Date();
    const postsAsOfToday = posts.filter((post) => new Date(post.date) <= dateToday);
    return { postsAsOfToday };
}

但是我可以清楚地看到如何在构建时创建静态 html,并且只显示它,而不管加载网页时的当前情况如何。然而,难道不应该让一些 javascript 在客户端“在运行时”过滤这些帖子,同时仍然保持它是一个“静态”博客吗?npm run buildnew Date()

编辑:这也会导致相同的行为:

--- BlogPosts.svelte
{#each posts as post}
    {#if new Date(post.date) <= new Date()}
        ...
    {/if}
{/each}
TypeScript 静态 svelte 博客 sveltekit

评论

0赞 Stephane Vanraes 11/9/2023
这是可能的,但数据仍然存在于客户端上,这意味着任何具有一些基本知识的人都可以看到您过滤掉的数据。但是,如果您在构建时(在加载函数中)过滤帖子,则它们不会。这当然意味着您每次“发布”帖子时都必须构建。
0赞 Dimebag 11/9/2023
@StephaneVanraes 没错,每当有新的博客文章时,我都想避免构建整个博客。总的来说,我试图区分对内容(帖子)的更改和对博客本身(网站)的更改。

答: 暂无答案