簡體   English   中英

Node.js中node-static中請求的資源上沒有“Access-Control-Allow-Origin”標頭

[英]No 'Access-Control-Allow-Origin' header is present on the requested resource in node-static in Node.js

我是node.js的新手,我不知道如何克服這個問題。 希望您能夠幫助我。

我有一個在node.js中運行的服務器,它有node-static和socket.io。 代碼如下。

var numClients=0;
var static = require('node-static');
//var static = require('express');
var http = require('http');
var file = new(static.Server)();
var app = http.createServer(function (req, res) {
res.setHeader('Access-Control-Allow-Origin', 'http://172.26.191.45:8080');

// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
file.serve(req, res);
}).listen(2013);


var io = require('socket.io').listen(app);


io.sockets.on('connection', function (socket){

function log(){
    var array = [">>> "];
    for (var i = 0; i < arguments.length; i++) {
        array.push(arguments[i]);
    }
    socket.emit('log', array);
}

socket.on('message', function (message) {
    log('Got message: ', message);
    socket.broadcast.emit('message', message); // should be room only
});


socket.on('create or join', function (room) {
    numClients=numClients+1;

    log('Room ' + room + ' has ' + numClients + ' client(s)');
    log('Request to create or join room', room);

    if (numClients == 0){
        socket.join(room);
        socket.emit('created', room);
    } else if (numClients == 1) {
        io.sockets.in(room).emit('join', room);
        socket.join(room);
        socket.emit('joined', room);
    } else { // max two clients
        socket.emit('full', room);
    }
    socket.emit('emit(): client ' + socket.id + ' joined room ' + room);
    socket.broadcast.emit('broadcast(): client ' + socket.id + ' joined room ' + room);

});

socket.on('disconnect', function () {
    numClients=numClients-1;
    log('Room has ' + numClients + ' client(s)');
});


});

我的服務器在localhost:2013中運行。 我的網頁是在localhost:8080。 當我嘗試訪問服務器時,出現以下錯誤

XMLHttpRequest cannot load https://computeengineondemand.appspot.com/turn?username=41784574&key=4080218913. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://172.26.191.45:8080' is therefore not allowed access. 

我知道這是由於CORS。 但我添加了代碼行來適當地設置標題。 當我檢查這個錯誤時,大多數人都說如何用node.js中的express來改進它,而不是node-static。

當我從不同的域訪問時,有人可以向我建議我接下來可以從服務器獲得響應。

這個問題可能有幾種可能的解釋:

說明1:原點未正確設置

更改

res.setHeader('Access-Control-Allow-Origin', 'http://172.26.191.45:8080');

res.setHeader('Access-Control-Allow-Origin', 'localhost');

如果這不起作用,請在服務器端輸出請求源,並將“localhost”替換為此源。 (我不知道足夠的節點告訴你如何輸出原點)。

說明2:標題未正確輸出

仔細檢查從服務器返回的標頭。 您可以通過安裝一些允許您查看請求標頭的瀏覽器插件來完成此操作。

確保標題正確無誤。 是您需要設置的列表 (對於PHP,但標題是相同的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM