【问题标题】:Origin http://localhost is not allowed by Access-Control-Allow-Origin.Access-Control-Allow-Origin 不允许来源 http://localhost。
【发布时间】:2013-11-02 09:34:15
【问题描述】:

我正在 Node.JS 中开发一个 REST Web 服务来与主干框架一起工作。 我已经使用 urlRoot:http://localhost:3000/users 定义了一个 Person 模型,并且我创建了一个请求处理程序,它在接收到一个发布请求时将这个人添加到数据库中。

app.post('/users', user.add(db));

exports.add = function(db){
    return function(req,res){

        console.log(req.body);

        var name = req.body.name;
        var age = req.body.age;
        var sex = req.body.sex;
        var job = req.body.job;

        var peopleDb = db.get('people');

        peopleDb.insert({
            'name':name,
            'age':age,
            'sex':sex,
            'job':job
        },function(e,docs){
            if(e){
                console.log(e);
            }else
            {
                res.setHeader('Content-Type','application/json');
                res.setHeader('Access-Control-Allow-Origin','*');
                res.setHeader('Access-Control-Allow-Methods','GET,PUT,POST,DELETE');
                res.writeHead(200);
                res.end(JSON.stringify(docs));
            }
        });
    }
}

当我尝试执行代码时,我在控制台中得到了这个:

Origin http://localhost is not allowed by Access-Control-Allow-Origin.

我从其他答案中了解到,添加标题:Access-Control-Allow-Origin:* 和 Access-Control-Allow-Methods:GET,PUT,POST,DELETE 可以解决问题,但对我没有用。我也尝试将这些标头放在 .htaccess 文件中,但没有成功。

有人可以告诉我代码是否有问题或解决此问题的任何方法吗?

【问题讨论】:

    标签: node.js backbone.js http-headers


    【解决方案1】:

    如果您使用express,您可以使用cors 包来允许这样的CORS,而不是编写中间件;

    var express = require('express')
    , cors = require('cors')
    , app = express();
    
    app.use(cors());
    
    app.get(function(req,res){ 
      res.send('hello');
    });
    

    【讨论】:

      【解决方案2】:

      当使用与OPTIONS HTTP 方法相同的路径时,您需要实现响应。我有这个代码允许在整个快递应用程序中使用 CORS:

      var app = express()
      app.use(function(req, res, next) {
          if (req.headers.origin) {
              res.header('Access-Control-Allow-Origin', '*')
              res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Authorization')
              res.header('Access-Control-Allow-Methods', 'GET,PUT,PATCH,POST,DELETE')
              if (req.method === 'OPTIONS') return res.send(200)
          }
          next()
      })
      // configure your routes
      

      【讨论】:

        猜你喜欢
        • 2013-04-09
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 2012-12-28
        • 2013-07-20
        • 2012-11-04
        相关资源
        最近更新 更多