我的 SvelteKit 项目中的“无服务器功能”经常出现错误

Posted

技术标签:

【中文标题】我的 SvelteKit 项目中的“无服务器功能”经常出现错误【英文标题】:I'm getting an error in "Serverless Function" in my SvelteKit Project often 【发布时间】:2022-01-22 02:10:29 【问题描述】:

我不知道为什么我有时会收到此错误。

504: GATEWAY_TIMEOUT
Code: FUNCTION_INVOCATION_TIMEOUT

我正在使用加载函数来获取索引页面上的帖子。

<script context="module">
    export async function load( page, fetch ) 
        const pagination = page.query.get('page') ?? 1;

        let PER_PAGE = 2;
        // calculate start page
        let startPage = +pagination === 1 ? 0 : (+pagination - 1) * PER_PAGE;

        // fetch total/count
        const totalUrl = `https://myblog.herokuapp.com/posts/count`;
        const totalRes = await fetch(totalUrl);

        // fecth articles
        const url = `https://sveltestrapiblog.herokuapp.com/posts?_sort=created_at:DESC&_start=$startPage&_limit=$PER_PAGE`;

        const articelRes = await fetch(url);

        if (articelRes.ok && totalRes.ok) 
            return 
                props: 
                    posts: await articelRes.json(),
                    total: await totalRes.json(),
                    pagination: +pagination
                
            ;
        

        return 
            status: articelRes.status,
            error: new Error(`Could not load $url`)
        ;
    
</script>

我不知道怎么了。

【问题讨论】:

这是在本地还是在您部署站点时?如果已部署,您将部署到哪里? 这是我部署的时候。首先我部署在 Netlify,现在部署在 Vercel。两者都得到相同的错误。 【参考方案1】:

当您部署 SvelteKit 应用程序时,它使用无服务器函数来处理传入请求并为每个页面呈现 html。当您部署到 Netlify 或 Vercel 等提供商时,它们会限制这些功能可以运行的时间。在 Vercel 上,爱好计划的限制是 5 seconds,而 Netlify 的限制是 10 seconds。如果您的页面渲染时间超过此限制,您将收到 FUNCTION_INVOCATION_TIMEOUT 错误。

我注意到您在https://sveltestrapiblog.herokuapp.com/posts 的 API 在我第一次点击它时需要一些时间来返回响应,可能是因为它在一段时间不活动后启动。发生这种情况时,如果您花费的时间超过执行时间限制,您将看到一个错误。您要么需要处理此错误,要么确保您的 API 始终可以在 5 秒内返回响应。

【讨论】:

谢谢!我只需要确保它在后端。

以上是关于我的 SvelteKit 项目中的“无服务器功能”经常出现错误的主要内容,如果未能解决你的问题,请参考以下文章

PouchDB 和 SvelteKit

无法从 sveltekit 循环中的 JSON 对象获取值

如何构建 Sveltekit 应用程序

如何在 SvelteKit 中以编程方式路由?

如何在 Sveltekit 中集成 sqlite3?

在 svelte.config.js 中找不到 SvelteKit $app