我在Node js中运行我的前端,在Jetty中运行后端。我正在尝试使用angular JS从前端发布数据,但它不适合我。可以有人建议可能是什么问题吗? 节点J在端口3000中运行,而jetty在9011中运行。 以下是代码段:
var app = angular.module("loginapp", []);
app.controller("loginctrl", function($scope,$http) {
app.config(['$sceDelegateProvider', function($sceDelegateProvider) {
$sceDelegateProvider.resourceUrlWhitelist(['self', 'http://localhost:9011/**']);
}]);
$scope.login = function(e){
console.log('clicked login...');
e.preventDefault();
$http({
url: "http://localhost:9011/test/dummy/doStuff1",
method: "POST",
data : {username: $scope.userName, password: $scope.password},
headers: { 'Content-Type': 'application/json' },
withCredentials: false,
}).success(function (data, status, headers, config) {
console.log('status',status);
console.log('data',status);
console.log('headers',status);
});
}
});
在浏览器控制台中显示:
POST http://localhost:9011/test/dummy/doStuff1
(index):1 XMLHttpRequest cannot load http://localhost:9011/test/dummy/doStuff1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 500.
我不确定是什么导致这个问题可以有人帮我这个?
答案 0 :(得分:1)
如果您在节点(localhost:3000)上托管您的角度应用程序并尝试向jetty(localhost:9011)发出ajax请求,那么您将遇到CORS(http://enable-cors.org/)问题。默认情况下,浏览器不允许您向其他域发出请求。您需要在服务器和角度应用程序中启用CORS。
服务器端显然取决于您使用的框架。使用Jersey的示例:http://blog.usul.org/cors-compliant-rest-api-with-jersey-and-containerresponsefilter/
然后在Angular中启用CORS(在您的情况下可能不需要......如果您从其他域加载模板,则需要它):
//Allow CORS requests to these urls:
$sceDelegateProvider.resourceUrlWhitelist([
'self',
'http://localhost:9011/**'
]);