【问题标题】:CORS Error: Angular.JS, Node.JS and Express [duplicate]CORS 错误:Angular.JS、Node.JS 和 Express [重复]
【发布时间】:2015-11-21 02:52:07
【问题描述】:

在将数据从 http post 请求返回到我一直在构建的 API 时遇到问题。抛出错误:

XMLHttpRequest 无法加载(此处为 API 的 URL)。不 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许使用原点“http://localhost:9000” 访问。

这是客户端的 Angular 代码:

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

这是我的 API 的 Node 服务器端代码:

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,任何建议和帮助将不胜感激!

【问题讨论】:

  • 您为 POST 请求正确设置了 cors 标头,但是,在某些情况下,您可能无法正确响应发布请求之前的 OPTIONS 请求。

标签: javascript angularjs node.js express


【解决方案1】:

从 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

【讨论】:

  • 在 app.js 中定义路由之前不要忘记使用 cord
【解决方案2】:

在您的节点应用程序中,此代码示例应该可以解决您的问题:

// 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);

【讨论】:

  • 这个对我有用。你能对此添加一些解释吗?是否可以安全生产?
猜你喜欢
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 2013-04-16
  • 2020-07-31
  • 2018-08-08
  • 2015-12-17
相关资源
最近更新 更多