2013-07-02 35 views
4

我經由連接訪問控制原點

 var connect = require('connect'); 
    connect.createServer(
    connect.static(__dirname)).listen(8080); 

運行靜態網頁我不得不響應標頭添加到上面的代碼繞過訪問控制

response.writeHead(200, { 
      'Content-Type': 'text/html', 
      'Access-Control-Allow-Origin' : '*'}); 

我如何將它添加到上面的連接代碼。

+0

可能重複[我如何添加CORS報頭的靜態連接的服務器?(http://stackoverflow.com/questions/17124600/how-can-i-add- CORS報頭到一個靜態 - 連接服務器) – jmingov

回答

2

我回答了這個問題here

相關代碼

var http = require("http"); 
var connect = require('connect'); 

var app = connect() 

.use(connect.logger('dev')) 

.use(connect.static('home')) 

.use(function(req, res){ 

res.setHeader("Access-Control-Allow-Origin", "http://example.com"); 
res.end('hello world\n'); 

}); 

var server = http.createServer(app); 

server.listen(9999, function() { 

console.log('server is listening'); 
}); 

Enable cors提供了極好的資源,將CORS到您的服務器。

如果你有送與你服務好每一個靜態文件的CORS標頭,你必須使用Connect然後做這個

導航到connect\node_modules\send\lib\send.js

查找文件中setHeader功能。這是實際將標題設置爲靜態資源的功能。只需添加

res.setHeader("Access-Control-Allow-Origin", "your domain");

和您的所有文件都會有CORS在他們頭

如果你只是使用連接到提供靜態文件,不需要任何的其他功能考慮使用send代替。這樣你就可以直接訪問它的所有方法,並且不需要編輯文件。您可以簡單地從您的創建服務器方法添加標題。下面是示例代碼

var http = require("http"); 
var connect = require('connect'); 
var send = require('send'); 
var url = require('url'); 

var app = http.createServer(function(req, res){ 
// your custom error-handling logic: 
function error(err) { 
res.statusCode = err.status || 500; 
res.end(err.message); 
} 

// your custom directory handling logic: 
function redirect() { 
res.statusCode = 301; 
res.setHeader('Location', req.url + '/'); 
res.end('Redirecting to ' + req.url + '/'); 
} 

function setRoot(){ 
res.setHeader("Access-Control-Allow-Origin", 

"http://example.com"); 

return './public'; 
} 

function setIndex(){ 
res.setHeader("Access-Control-Allow-Origin", 

"http://example.com"); 

return '/index.html'; 
} 


send(req, url.parse(req.url).pathname) 
.root(setRoot()).index(setIndex()) 
.on('error', error) 
.on('directory', redirect) 
.pipe(res); 
}).listen(3000);