我有一个使用以下内容构建的应用程序:PhoneGap + AngularJS(客户端)--- ExpressJS + MongoDB(服务器)。该应用程序托管在 Ubuntu 机器上的 Amazon EC2 上。该应用程序运行良好,直到...
在 EC2 机器上,我做了一个:
sudo apt-get update
完成此操作后,我开始在我的应用程序中收到跨域共享错误(查看 Chrome 中的控制台)。在我的 AngularJS 应用程序中,我有这样的代码抛出错误:
$http.get('http://amazon.ec2.foo/offers').success(function(data) { });
错误是:
XMLHttprequest doesn’t allow Cross-Origin Resource Sharing on http://localhost:8000
所以,我像这样更新了我的服务器应用程序:
app.all("/api/*", function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
return next();
});
起初这似乎很好 - 我停止收到 Cross Origin 错误,我可以在控制台中看到来自 http 请求的响应。但是,在将响应打印到控制台后,我的应用程序将停止响应并似乎立即挂起 - 我无法单击网页的任何部分,或打开开发者控制台等。唯一的办法是关闭选项卡并重新打开它。Chrome 中的其他选项卡完全没问题。
在调试了一段时间后,我发现早些时候(没有那些应用程序标头),我从服务器获得了 HTTP 200,但现在我获得了 HTTP 304(未修改),Angular 似乎将其视为一个错误。
我发现在选项卡上等待大约 2 分钟会导致网页加载从 http 请求接收到的数据 - 但网页仍然没有响应。
我已经确认了一些事情来缩小这个范围,AngularJS 在 HTTP 304 上做了一些奇怪的事情:
- 我在 localhost 上运行它时出现同样的错误 - 所以,它与 EC2 无关。
- 我删除了 mongodb 只是为了发回一些简单的数据 - 所以,它与 Mongo 无关。
- 我在 Chrome 中将它作为一个简单的服务器运行 - 所以,我已经消除了 PhoneGap 的问题。
有没有人见过这个/你知道问题可能是什么以及我该如何解决它?
谢谢!