Angular JS中的POST问题

时间:2015-03-14 16:24:04

标签: angularjs node.js express http-post angular-ui

我在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.

我不确定是什么导致这个问题可以有人帮我这个?

1 个答案:

答案 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/**'
]);