连接中的访问控制源(node.js)

时间:2013-07-02 14:46:05

标签: node.js express connect

我正在通过连接

运行静态页面
     var connect = require('connect');
     connect.createServer(
     connect.static(__dirname)).listen(8080);

我必须在上面的代码中添加一个响应头以绕过访问控制

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

如何将其添加到上述连接代码中。

1 个答案:

答案 0 :(得分: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标题

如果您只是使用connect来提供静态文件而不需要任何其他功能,请考虑使用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);