node.js服务器给出“这是一个字符串”。 (writeHeader,write(string),end)。
执行$ http请求时,我看到node.js服务器正在响应并重新发送信息。
在Angular中,我执行以下请求:
angular.module('phoneList').
component('phoneList', {
templateUrl: 'phone-list/phone-list.template.html',
controller: function PhoneListController($http) {
var self = this;
$http.get('http://127.0.0.1:8081/echo').then(function(response) {
self.data = response.data;
}, function(err) {
self.error = err;
self.status = response.status;
self.statusText = response.statusText;
});
}
});
响应
{ “数据”:NULL, “状态”: - 1, “配置”:{ “方法”: “GET”, “transformRequest”:[空], “transformResponse”:[空], “URL”: “http://127.0.0.1:8081/echo”, “标题”:{ “接受”:“应用/ JSON, text / plain, / “}},”statusText“:”“}
我试过从node.js或HTML-text发送JSON。没有不同。
答案 0 :(得分:5)
非常感谢, @Sebastian Sebald 和 @Dex 指导我找到解决方案。我只是想在我的计算机上运行一个简单的Node.js服务器,向我的(简单)Angular脚本提供消息。
是的,这是一个跨域问题。 @TonyTakeshi 为这个问题提供了一个很好的解决方案。您可以通过以下方法在node.js服务器文件中解决它:
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
用于简单测试配置的重物; - )
答案 1 :(得分:4)
请咨询official Angular docs for $http。它陈述如下:
此外,小于-1的状态代码归一化为零。 -1通常意味着请求被中止,例如使用config.timeout。
所以我猜你的后端有问题。也许在开发者控制台中查看请求是否到达您的服务器。
答案 2 :(得分:1)
如果您正在与Tomcat交谈并使用过滤器设置,例如对于限制访问的401,此过滤器可能会阻止您的Access-Control标头与请求一起发送,并且您的401将在Angular中显示为-1,即使它在浏览器内网络请求日志中显然是401
只是在这里张贴这个,因为我忘了并在一年内重新做同样的蠢事。
答案 3 :(得分:0)
我最近遇到此问题的另一个建议:
它是断断续续的,不可重现,并且会在转换时间间隔中发生,有时在〜20秒后,有时在> 5毫秒内(没有足够的时间进行完整往返)
我在测试时隔离的东西:服务器,负载平衡器,防火墙,angularjs应用程序本身,浏览器。
广泛的测试使所有罪魁祸首无罪,这不是CORS的问题。问题在于最终用户的互联网连接薄弱,断断续续。如果状态返回-1并且最大重试次数有效地解决了此问题,则实现HTTP拦截器重试功能。