typescript 如何将Socket.io和SvelteKit网络应用程序部署到Vercel?

u0njafvf  于 2023-01-10  发布在  TypeScript
关注(0)|答案(1)|浏览(156)

我正在开发一个. io风格的多人游戏,使用Socket.io和SvelteKit,当使用开发服务器在本地托管项目时,一切正常,但是当我部署到Vercel时,它记录Failed to load resource: the server responded with a status of 404 ()
这是我当前的express服务器.ts(不起作用)

import http from "HTTP";
import { handler } from './build/handler.js';
// Gives error: An import path cannot end with a '.ts' extension.
import injectSocketIO from "src/lib/socket-handler.ts";
import express from 'express';

const app = express();
const server = http.createServer(app);

injectSocketIO(server)

app.use(handler);

// Should I change something here?
server.listen(3000, () => {
    console.log('Running on http://localhost:3000');
});

我可以使用vite插件在本地运行开发服务器,如下所示:

import injectSocketIO from "./src/lib/socket-handler";

plugins: [sveltekit(), {
    name: "sveltekit-socket-io",
    configureServer(server) {
        injectSocketIO(server.httpServer);
    },
}],

我试着按照这里列出的步骤操作,但是我使用的是socket-handler.ts而不是socket-handler.js,而且我不熟悉如何设置启动脚本以在Vercel中运行。如有任何帮助,我将不胜感激!

8zzbczxx

8zzbczxx1#

我仍在寻找更好的方法,但我通过将Express服务器从Svelte src目录中取出来修复了相同的问题。
我的代码和你的一样,只是从根目录导入socket-handler.js

// server.js
import express from 'express'
import injectSocketIO from './socket-handler.js'
import { handler } from './build/handler.js'

const app = express()
const server = http.createServer(app)

// Inject SocketIO
injectSocketIO(server)

// SvelteKit handlers
app.use(handler)

server.listen(3000, () => {
  console.log('Running on http://localhost:3000')
})

现在运行npm run build && node server.js构建Svelte应用程序,然后启动Express服务器。
这个tutorial让我想到了那个解决方案,你基本上运行一个标准的Express服务器,添加socket.io,然后让SvelteKit使用Express中间件处理剩下的事情。

相关问题