【问题标题】:How can I tell whether SvelteKit's "load" function is running on the server vs. client?如何判断 SvelteKit 的“加载”功能是否在服务器和客户端上运行?
【发布时间】:2021-08-20 20:06:37
【问题描述】:

我正在尝试通过 load 函数在 SvelteKit 页面中进行 API 调用,但我不想使用本地端点代理这些调用,因为我希望让 Web 服务器尽可能轻便。

我具体要做的是,当从服务器调用时,API 的 URL 应该与从客户端调用时不同(例如“http://localhost:1234”与“https:// /example.com:1234")。

但是,比这更普遍的是,有没有办法区分当前代码是在服务器上运行还是在客户端上运行?

【问题讨论】:

    标签: svelte sveltekit


    【解决方案1】:

    load 函数中,可以选择在从$app/env 导入后使用browser 标志。

    <script context="module">
        import { browser } from '$app/env'; 
        ...
        export async function load({ fetch }) {
            if (!browser) {
                // code here runs only on the server
            }
            return {
               ...
            }
        }
        ...
    <script>
    

    以下来自SvelteKit's docs

    browser 是 true 还是 false 取决于应用程序是否正在运行 浏览器或服务器上

    【讨论】:

    • 只是process.browser有什么问题吗?
    • @koo5 这不是意味着添加process 依赖吗?不确定那个是否是 ES 模块。如果没有一些不必要的变通方法 (FAQ),CJS 模块可能不适用于 SvelteKit。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多