Sails / Angular Cross-Origin请求已被阻止

时间:2015-02-22 20:34:58

标签: angularjs node.js model-view-controller cors sails.js

我在localhost上有一个角度应用作为前端:9000并在loclahost上作为后端航行:1337

在角度应用程序中,我这样做是为了查询服务器:

angular.module('webApp')
.controller('FoodCtrl', function($scope, $resource) {

    var Food = $resource('http://localhost:1337/food', {
        id: '@id'
    }, {
        update: {
            method: 'PUT'
        }   
    }); 

    $scope.food = new Food();
    $scope.foodList = Food.query();

    $scope.saveFood = function() {

        var method = $scope.food.id ? '$update' : '$save';

        $scope.food[method]({}, function() {

            $scope.food = new Food();
            $scope.foodList = Food.query();

            console.log("Saved!!");
        })
    };

这种行为有点奇怪。如果我转到角度应用程序并尝试从Firefox触发saveFood函数:

阻止跨源请求:同源策略禁止在localhost:1337 / food读取远程资源。这可以通过将资源移动到同一域或启用CORS来解决。

来自Chrome有点不同。有时我得到CORS错误,有时候没有,有时服务器上的模型甚至更新了值...但页面显示"不能POST /"

现在在我的sails应用程序中,我启用了CORS,就像这样: https://github.com/tarlepp/angular-sailsjs-boilerplate/blob/master/backend/config/cors.js#L71

编辑:当我检查请求的标题时,我看到2个帖子,一个在localhost:1337 / food,其中包含Access-Control-Allow-Origin:localhost:9000,另一个包含localhost:9000 /#/ food不会得到404

这是chrome控制台的一个例子输出:

2Navigated to http://localhost:9000/
(index):1 POST http://localhost:9000/ 404 (Not Found)
2Navigated to http://localhost:9000/
(index):1 POST http://localhost:9000/ 404 (Not Found)
2Navigated to http://localhost:9000/
food.js:33 Saved!!
(index):1 POST http://localhost:9000/ 404 (Not Found)
Navigated to http://localhost:9000/

所以有一次它没有发布它而另一次发布它。但我总是得到"不能POST /"在页面上 如果要重现它,所有代码和步骤都在这里: http://okamuuu.hatenablog.com/entry/2014/04/10/135240

3 个答案:

答案 0 :(得分:0)

端口有一个冒号,它被剥离你需要逃脱它

尝试单个'\'或双'\'反斜杠

http://localhost\:1337/

http://localhost\\:1337/

$resource('http://localhost\:1337/food', {
        id: '@id'
    }, {
        update: {
            method: 'PUT'
        }   
    }); 

答案 1 :(得分:0)

尝试将此添加为config / routes.js中的第一个路径

'OPTIONS /*': function(req, res) {return res.send(200);},

Angular运行预检OPTIONS请求以检查授权内容。您需要回复此请求。

答案 2 :(得分:0)

Sails.js在config/cors下为CORS提供配置。

您可以指定允许哪些外国主机请求您的数据。