我的前端与我的服务器位于同一个域,称之为X.但是,前端位于端口8080上,服务器(nodejs)正在侦听端口1337上的活动。每当我到达X:1337在我的浏览器中,我在浏览器中显示正确的json。但是当我尝试从前端使用ajax get请求时,get请求失败。在firebug中,它只显示标题。这是一个跨域问题吗?或者做不同的端口无关紧要?
谢谢!
答案 0 :(得分:4)
我不知道为什么这个问题被低估了,因为这实际上是一个有趣的问题,而且我自己也找到了解决问题的方法。具体来说,我喜欢构建我的应用程序,使得前端是一个静态网站(roots / backbone / marionette是一个很棒的堆栈),并从单独的API应用程序中提取数据跨域问题,同时保持cookie完整,这样我就不需要做令牌身份验证或其他任何事情。我不确定你是否在这里面对类似的问题,但看起来你可能就是这样,我是如何解决它的。
我所做的是使用nginx将我的服务器映射到单个域名(我写了getting started guide here)。这样,您就没有跨域问题,并且它们可以非常顺利地协同工作。您可以使用如下所示的指令来实现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
的节点服务器。此外,由于两者都在同一个域中,因此不会出现任何跨域问题。这种设置在本地和生产中都很有效。