我的前端与我的服务器在同一个域上,称之为 X。但是,前端在端口 8080 上,服务器 (nodejs) 正在侦听端口 1337 上的活动。每当我在浏览器中到达 X:1337 ,我的浏览器中显示了正确的 json。但是当我尝试从前端使用 ajax 获取请求时,获取请求失败。在萤火虫中,它只显示标题。是跨域问题吗?还是不同的端口无关紧要?
谢谢!
我的前端与我的服务器在同一个域上,称之为 X。但是,前端在端口 8080 上,服务器 (nodejs) 正在侦听端口 1337 上的活动。每当我在浏览器中到达 X:1337 ,我的浏览器中显示了正确的 json。但是当我尝试从前端使用 ajax 获取请求时,获取请求失败。在萤火虫中,它只显示标题。是跨域问题吗?还是不同的端口无关紧要?
谢谢!
我不知道为什么这个问题被否决了,因为这实际上是一个有趣的问题,我自己也想出了一个解决方案。具体来说,我喜欢构建我的应用程序,使前端是一个静态站点(根/主干/木偶是一个很棒的堆栈),并从一个单独的 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
。此外,由于两者都在同一个域上,所以不会有任何跨域问题。此设置在本地和生产环境中都能很好地工作。