如何在 Sveltekit 独立端点上启用 CORS?

Zac*_*ham 6 server-side-rendering svelte sveltekit

我正在构建一个需要从任何来源访问 sveltkit 端点的嵌入。

如果我使用express,我会简单地使用cors中间件。

我很好奇是否有办法在 sveltkit 端点上启用 CORS,这样我就不需要启动另一个服务。

到目前为止我尝试过的一些事情:

  • 从端点中的获取句柄返回“Access-Control-Allow-Origin”:“*”

  • 覆盖 OPTIONS http 方法(似乎从未被调用)

  • 我看到了这个reddit 帖子,但它似乎已经过时了。

nos*_*tro 7

我遇到了类似的问题,但无法使用express解决方法。

然而,这对我有用:

  const response = new Response(<YOUR_RESPONSE>);
  
  response.headers.append('Access-Control-Allow-Origin', <YOUR_URL>);

  return response;
Run Code Online (Sandbox Code Playgroud)

Sveltekit:https://kit.svelte.dev/docs/web-standards#fetch-apis-headers

MDN: https: //developer.mozilla.org/en-US/docs/Web/API/Headers


Zac*_*ham 5

我想到了!

根据您使用的 sveltkit 适配器,答案会有所不同。就我而言,我使用的是节点适配器,实际上可以从 Express 提供 svelte 应用程序并在那里启用 cors 中间件:

// this is file exported by the node adapter plugin
import { handler } from './build/handler.js'; 
import express from 'express';
import cors from 'cors';

const app = express();
app.use(cors());

// add a route that lives separately from the SvelteKit app 
app.get('/healthcheck', (req, res) => { res.end('ok'); });

// let SvelteKit handle everything else, including serving prerendered pages and static assets app.use(handler);

app.listen(3000, () => { console.log('listening on port 3000'); });
Run Code Online (Sandbox Code Playgroud)

这是节点适配器文档中“自定义服务器”示例的修改: https: //kit.svelte.dev/docs/adapter-node#custom-server