使用Express.JS发送额外的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 })); }); 

我希望响应包括一个addittional http头( Access-Control-Allow-Origin:* )。 它应该放在哪里? 我尝试了下面的示例,但是当然头只出现在默认页面上:

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

谢谢。

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

是的,那是因为你只为GET /路由而不是为其他path定义了它。 您应该使用中间件。

如果您希望为所有请求设置标题:

 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 )。 另一种方法是匹配url,如果URL匹配,则设置header。

 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', '*') } } ))