我有一些用Express.JS提供的静态页面。设置很简单:
var app = express();
app.configure(function(){
app.use(express.static(path.join(application_root, "StaticPages")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
我希望响应包含一个附加的http标头( Access-Control-Allow-Origin:* )。应该放在哪里? 我尝试了下面的示例,但当然标题只出现在默认页面上:
app.get('/', function(req, res){
res.setHeader("Access-Control-Allow-Origin", "*");
res.send('Hello World');
});
感谢。
答案 0 :(得分:52)
我尝试了下面的示例,但当然标题只出现在默认页面上
是的,这是因为您仅为GET /
路由定义了它,而不是为其他路径定义它。你应该使用中间件。
如果您希望为所有请求设置标题:
app.configure(function(){
app.use(function(req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*");
return next();
});
app.use(express.static(path.join(application_root, "StaticPages")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
如果您只是想为静态文件夹执行此操作,则没有通用方法。您可以更改express.static(来自connect.static)。另一种方法是匹配网址,并在网址匹配时设置标头。
app.configure(function(){
app.use(function(req, res, next) {
var matchUrl = '/StaticFolder';
if(req.url.substring(0, matchUrl.length) === matchUrl) {
res.setHeader("Access-Control-Allow-Origin", "*");
}
return next();
});
app.use(express.static(path.join(application_root, "StaticPages")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
注意:中间件需要在路由生效之前,换句话说,你不能把中间件放在静态中间件之后。
答案 1 :(得分:3)
另一种方式:
app.use(express.static(
path.join(application_root, "StaticPages"),
{
setHeaders: (res) => {
res.setHeader('Access-Control-Allow-Origin', '*')
}
}
))