对于我的本地开发系统,我正在尝试使用grunt-contrib-connect提供前端资产。我需要一个跨域解决方案来在Firefox中使用字体。服务器运行得很好,但我似乎无法设置标头。
我正在使用grunt-contrib-connect的0.7.1版本。
connect: {
dev: {
options: {
port: '9001',
base: 'build',
hostname: 'localhost',
keepalive: true,
middleware: function(connect, options, middlewares) {
// inject a custom middleware into the array of default middlewares
// this is likely the easiest way for other grunt plugins to
// extend the behavior of grunt-contrib-connect
middlewares.push(function(req, res, next) {
req.setHeader('Access-Control-Allow-Origin', '*');
req.setHeader('Access-Control-Allow-Methods', '*');
return next();
});
return middlewares;
}
}
}
}
使用keepalive和中间件有问题吗?
答案 0 :(得分:17)
很遗憾没有人回应过这个问题。
您的代码与文档中的代码类似,但您将标题添加到req
而不是res
。
第二个问题是,文档误导您 (fixed)将您的中间件添加到.push
。您的代码根本没有被调用,因为之前的某些内容正在执行res.end
和/或不调用next()
。
您的固定代码如下所示:
middleware: function (connect, options, middlewares) {
// inject a custom middleware
middlewares.unshift(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', '*');
//a console.log('foo') here is helpful to see if it runs
return next();
});
return middlewares;
}