2015-08-26 101 views
0

有问题将数据从http post请求回送到我正在构建的API。抛出错误:CORS错误:Angular.JS,Node.JS和Express

XMLHttpRequest cannot load (URL to API here). No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:9000 ' is therefore not allowed access.

下面是在客户端的角度代码:

$http.post('MyAPI'sURLHere', {date: $scope.information.PubDate}) 
        .then(function(response){ 
         console.log(response); 
        }, function(error){ 
         console.log(error); 
        }); 

下面是我的API节点服务器端代码:

app.post('/getThing', function(req, res){ 
     var date = req.body.date; 
     console.log(typeof date); 
     var query = Overquery 
     var query2 = "alter session set nls_date_format = 'MM/dd/yyyy'"; 
     console.log(query); 
     oracleDB.execute(query2, function(err, result){ 
       if(err){ 
         console.log(err.message); 
       } 
       else{ 
         console.log(result); 
       } 
     }); 
     oracleDB.execute(query, function(err, result){ 
       if(err){ 
         console.log(err.message); 
       } 
       else{ 
         res.header('Access-Control-Allow-Origin', '*'); 
         res.header('Access-Control-Allow-Methods', 'POST'); 
         res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); 
         console.log(result.rows); 
         res.json(result.rows); 
       } 
     }); 
}); 

第一次建立一个API所以任何建议和帮助将不胜感激!

+0

你正确设置CORS标头的POST请求,然而,你可能在某些情况下,没有正确回应发出请求之前的OPTIONS请求。 –

回答

0

运行从一个bash shell中的项目如下:

npm install cors --save

它将安装这样的: https://github.com/expressjs/cors

然后创建应用程序时,将其添加到您的服务器。

var express = require('express'); 
var cors = require('cors'); 
var app = express(); 
app.use(cors()); 

编辑:这将使每一个域至极CORS是不推荐出于安全原因。请在这里进行进一步CORS配置:https://github.com/expressjs/cors#configuring-cors

0

在您的节点应用,代码此示例应解决您的问题:

// Allowing X-domain request 
var allowCrossDomain = function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Cache-Control"); 

    // intercept OPTIONS method 
    if ('OPTIONS' == req.method) { 
     res.send(200); 
    } 
    else { 
     next(); 
    } 
}; 
app.use(allowCrossDomain);