Node.Js错误" No' Access-Control-Allow-Origin'标题出现在请求的"

时间:2016-05-26 15:59:34

标签: javascript ajax node.js express cors

这个问题与其他人类似;然而,有一些区别让它变得非常混乱,为什么它不起作用。

我的JavaScript调用了6个json文件,并且都正常工作。在Node.JS中,我设置了cors和header,如下所示:

var fs = require('fs');
var http = require("https");
var express = require('express');
var app = express();
var path = require('path');
var http = require("http");
var url = require("url");
var req = require('request')
var pem = require('pem');
var cors = require("cors");

app.use(express.static(path.join(__dirname, '../')));

app.listen(process.env.PORT || 8080);

app.options('*', cors()); 

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-  With, Content-Type, Accept");
    next();   
});

app.all('/posts', function(req, res){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
});

app.get('/', function (req, res) { 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    res.writeHead(200, {'Content-Type': 'text/plain'});
    contents = fs.readFileSync("sliderImages.json", "utf8");
    console.log(path.join(__dirname, '/sliderImages.json'));
    res.end(contents);
});

Node JS从绝对URL路径中获取所有6个json文件。我昨天又做了两次,一切都很好。但是,今天我做了一个并以相同的方式实现并收到以下错误:

  

否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' null'因此不允许访问。

我以相同的方式实施每一个,例如:

var base_url = 'http://127.0.0.1:8080';

mainInformationTop();

function mainInformationTop()
{
    $.ajax({
        type: "GET", 
        url: base_url + "/api/topInformation.json", 
        dataType: "json",
        success: function(response)
        {
            var json_obj = response.mainDescription;
            var imagesSlider="";
            var imagesSliderDescription ="";
            for (var i = 0; i< json_obj.length; i++) 
            {

            }

        }
        , 
        error: function(jqXHR, textStatus, errorThrown) {
            alert(jqXHR.status);
        }  
    })    
}

我不认为json文件是相关的,但下面是我的json文件:

{"mainDescription":[
{
"display": "my display",
"description" : "my description"
}
]}

我已经取出for循环中的信息以进行测试以及我的追加,因为无关紧要。由于某种原因,它失败并转向错误而不是成功。所有其他呼叫都以相同的方式设置并正常工作。

4 个答案:

答案 0 :(得分:23)

这是一个更简单的this answer版本,可以达到同样的效果:

Character:a
Character:b
Character:c
Character:4
4 is not in the alphabet.

答案 1 :(得分:4)

修正了它。

var fs = require('fs');
var http = require("https");
var express = require('express');
var app = express();
var path = require('path');
var http = require("http");
var url = require("url");
var req = require('request')
var pem = require('pem');
var cors = require("cors");

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});
app.use(express.static(path.join(__dirname, '../')));

app.listen(process.env.PORT || 8080);

app.options('*', cors()); 

app.all('/*', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "http://localhost:8080");
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header("Access-Control-Allow-Headers", "X-Requested-With,     Content-Type");
    next();
});

app.get('/', function (req, res) { 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    res.writeHead(200, {'Content-Type': 'text/plain'});
    contents = fs.readFileSync("sliderImages.json", "utf8");
    console.log(path.join(__dirname, '/sliderImages.json'));
    res.end(contents);
 });

尽管评论说的是我改变的唯一真实的事情是将app.use移到其他所有事情之前。这解决了这个问题。

答案 2 :(得分:0)

我也遇到了这个问题,代码与上面相同,但是我们希望将代码放在起点。不要将这段代码放在最后(这意味着在(res.end())发送响应到客户端之前)。三种方法(GET,POST,HEAD)允许您在将代码放置在我认为的任何位置时使用,但对于其他方法,请尝试并尝试使用其他模块(例如cors,express),但我仅使用http模块

var server=http.createServer(function (req, res) {

res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader("Access-Control-Allow-Methods","PUT,GET,DELETE,PATCH")
res.setHeader('Access-Control-Allow-Credentials', true)
res.setHeader('Access-Control-Allow-Headers','X-Requested-With,content-type,Origin,Accept,Authorization')
// your other code followes

答案 3 :(得分:0)

安装cors

npm install cors --save

在您的 app.js 中编写此代码

const cors = require('cors');
const express = require('express');
let app = express();
app.use(cors());
app.options('*', cors()); //put this before your route