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'); });
谢谢。
我尝试了以下示例,但标题仅出现在默认页面上
是的,这是因为您仅为GET /路由而不是其他路径定义了它。您应该改为使用中间件。
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)。做到这一点的另一种方法是匹配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 })); });
注意:中间件必须在路由生效之前,换句话说,您不能将中间件放在静态中间件之后。