3

我的前端与我的服务器在同一个域上,称之为 X。但是,前端在端口 8080 上,服务器 (nodejs) 正在侦听端口 1337 上的活动。每当我在浏览器中到达 X:1337 ,我的浏览器中显示了正确的 json。但是当我尝试从前端使用 ajax 获取请求时,获取请求失败。在萤火虫中,它只显示标题。是跨域问题吗?还是不同的端口无关紧要?

谢谢!

4

1 回答 1

4

我不知道为什么这个问题被否决了,因为这实际上是一个有趣的问题,我自己也想出了一个解决方案。具体来说,我喜欢构建我的应用程序,使前端是一个静态站点(/主干/木偶是一个很棒的堆栈),并从一个单独的 API 应用程序中提取数据而不会出现跨域问题,同时保持 cookie 完整,以便我不需要做令牌认证或任何事情。我不确定您是否在这里遇到类似的问题,但似乎您可能会遇到这样的问题,这就是我解决它的方法。

我所做的是使用nginx将我的两个服务器映射到一个域名(我在这里写了一个入门指南)。这样,您就没有跨域问题,并且它们可以非常顺利地协同工作。您可以使用如下指令来使 nginx 发生这种情况:

server {
  listen 1234;
  server_name localhost;

  # re-route all api requests and remove the
  # /api piece before routing them through
  location /api {
    rewrite ^(/api)(.*)$ /$2 break;
    proxy_pass http://localhost:1337;
    proxy_set_header Host $http_host;
  }

  # pass through all other requests to the front end.
  # in production this should be compiled and use a regular
  # try_files block
  location / {
    proxy_pass http://localhost:8080;
    proxy_set_header Host $http_host;
  }

}

使用此代码,您将设置一个服务器,该服务器localhost:1234将所有正常请求发送到您的前端运行,8080以及任何从/api您的节点服务器开始的请求1337。此外,由于两者都在同一个域上,所以不会有任何跨域问题。此设置在本地和生产环境中都能很好地工作。

于 2013-10-24T15:41:06.453 回答