Node.js 使用Express.JS发送其他http头

Node.js 使用Express.JS发送其他http头,node.js,express,Node.js,Express,我有几个使用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头(访问控

我有几个使用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头(访问控制允许源代码:)。它应该放在哪里? 我尝试了以下示例,但标题当然只显示在默认页面上:

app.get('/', function(req, res){
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.send('Hello World');
});
谢谢

我尝试了下面的示例,但是标题当然只出现在默认页面上

是的,这是因为您仅为
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(来自)。另一种方法是匹配url,如果url匹配,则设置标题

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 }));
});
注意:中间件需要在路由之前生效,换句话说,您不能将中间件放在静态中间件之后。

另一种方式:

app.use(express.static(
    path.join(application_root, "StaticPages"),
    {
        setHeaders: (res) => {
            res.setHeader('Access-Control-Allow-Origin', '*')
        }
    }
))

那么
setHeaders-用于设置HTTP头以与文件一起使用的函数呢。-函数
在静态中,您可以在静态中间件之后添加一个处理程序,该中间件设置标题而不匹配url子字符串,而不是使用
app。使用
。。。减少开销对于那些寻找如何在路由上设置自定义标头且未定义
res.setHeader
的用户,请使用
res.set
res.header