首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heroku Nodejs诉Vercel Nodejs

Heroku Nodejs诉Vercel Nodejs
EN

Stack Overflow用户
提问于 2021-02-28 11:37:10
回答 1查看 724关注 0票数 1

我有一个服务器托管在Heroku。此外,客户端(React)托管在Vercel中。这个组合很完美!但是,出于我的好奇心,我试着用Vercel主持服务器端脚本。然后,当我试图连接到Vercel托管-服务器时,客户端将返回此错误Access to XMLHttpRequest at 'https://socketio-vercel.vercel.app/socket.io/?EIO=4&transport=polling&t=NVeP_Ax' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. (我正在本地主机:3000中进行测试)。

服务器端代码(在Heroku和Vercel中都是相同的) ->

代码语言:javascript
复制
"use strict";

const express = require("express");
const socketIO = require("socket.io");

const PORT = process.env.PORT || 3000;
const INDEX = "/index.html";

const server = express()
  .use((req, res) => res.sendFile(INDEX, { root: __dirname }))
  .listen(PORT, () => console.log(`Listening on ${PORT}`));

const io = socketIO(server, {
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST"],
  },
});

io.on("connection", (socket) => {
  console.log("Client connected");
  socket.on("disconnect", () => console.log("Client disconnected"));
});

setInterval(() => io.emit("time", new Date().toTimeString()), 1000);

客户端代码(如果服务器由Heroku托管)(工作) ->

代码语言:javascript
复制
useEffect(() => {
if (shouldStart) {
  axios.get("api/sync").then((response) => {
    setMessages(response.data);
    const socket = io("wss://radiant-mountain-09008.herokuapp.com");
    socket.on("connect", () => {
      console.log("connected"); // "G5p5..."
    });
    socket.on("time", (msg) => {
      console.log(msg);
    });
  });
}
}, [shouldStart]);

客户端代码(如果服务器由Vercel托管) ->

代码语言:javascript
复制
useEffect(() => {
if (shouldStart) {
  axios.get("api/sync").then((response) => {
    setMessages(response.data);
    const socket = io("wss://socketio-vercel.vercel.app");
    socket.on("connect", () => {
      console.log("connected"); // "G5p5..."
    });
    socket.on("time", (msg) => {
      console.log(msg);
    });
  });
}
}, []);

知道为什么会这样吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 19:04:03

据我所知,vercel只支持无服务器功能。您不能使用任何套接字,websocket库。您可以在这个官方的链接中从他们的github了解更多细节。我希望这能帮上忙。祝好运

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66408646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档