繁体   English   中英

如何判断 SvelteKit 的“负载”function 是在服务器上还是在客户端上运行?

[英]How can I tell whether SvelteKit's "load" function is running on the server vs. client?

我正在尝试从加载function 的 SvelteKit 页面中执行 API 调用,但我不想用本地端点代理这些调用,因为我想尽可能地保留 Z2567A5EC9705EB7AC2C98401 light33E06 服务器。

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

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

load function 中,可以选择在从$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 的文档

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

免责声明:我写的不是标题的真正答案,而是所描述问题的具体答案。

有一个有针对性的钩子 function ( externalFetch ),它的构建是为了在客户端或服务器上以不同的方式处理资源:

https://kit.svelte.dev/docs/hooks#externalfetch

/** @type {import('@sveltejs/kit').ExternalFetch} */
export async function externalFetch(request) {
  if (request.url.startsWith('https://api.yourapp.com/')) {
    // clone the original request, but change the URL
    request = new Request(
      request.url.replace('https://api.yourapp.com/', 'http://localhost:9999/'),
      request
    );
  }
 
  return fetch(request);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM