0

所以我正在设置一个应用程序以允许跨域请求。一直在使用这篇文章中的各种方法如何在 node.js 上的 express.js 框架中启用跨域资源共享 (CORS)

但是我收到一个错误,我似乎无法解决。这是我正在使用的(不是我尝试了大约 3 种概述的方法——它们都给出了相同的错误)。

 app.use(function(req, res, next){
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'X-Requested-With');
  next();
})
.options('*', function(req, res, next){
    res.end();
});

这仍然给我一个错误:

XMLHttpRequest cannot load http://localhost:3000/blah. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 

如果我注释掉顶部代码,我会得到预期的不允许错误,这似乎表明该请求正在由该代码正确处理。我还重新输入了内容类型请求,以确保我没有粘贴奇数字符。有什么线索吗?

4

2 回答 2

4

你有两个Access-Control-Allow-Headers标题。最后一个会赢。

您可能需要一个Access-Control-Allow-Headers带有逗号分隔列表值的标题。

于 2013-04-08T01:37:01.460 回答
0

使用 cors 插件,这样更容易,无需手动设置 res.header

在此处获取插件:https ://github.com/troygoode/node-cors

示例 REST API 代码:

'use strict';

var express = require('express'),
    cors = require('cors'),
    port = process.env.PORT || 3000,
    connect = require('connect'),
    app = express();

app.use(connect.bodyParser()); //For POST method JSON form data

//GET method
app.get('/books', cors(), function(req, res){
      //send JSON etc
      res.json({});
});

//POST method
app.post('/books/', cors(), function(req, res){                          
    var book = req.body;

    //insert book to DB etc

    //send result back to client
    res.send(book);
});

//start server on port 3000
if(!module.parent){
  app.listen(port, function(){
    console.log('Express server listening on port ' + port + '.');
  });
}

现在您可以从任何位置、端口等访问 REST API,干杯

于 2014-05-02T01:53:11.067 回答