Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将CORS标题添加到Meteor应用程序?_Meteor_Cors - Fatal编程技术网

如何将CORS标题添加到Meteor应用程序?

如何将CORS标题添加到Meteor应用程序?,meteor,cors,Meteor,Cors,如何向Meteor中的所有响应添加访问控制允许源代码:标题(特别是,我对/public/下的静态文件感兴趣)?我需要这个,以便外部网络应用程序可以访问我的Meteor应用程序提供的数据。有关启用CORS的更多信息。有两种方法。一种是修改meteor代码并将其添加到中(以便每个文件都有这个头)。这可能不是一个好主意,因为您不希望每个文件都有这个。但若你们真的改变了,那个么就和应用程序挂钩吧 var app = __meteor_bootstrap__.app; app.use(function(r

如何向Meteor中的所有响应添加
访问控制允许源代码:
标题(特别是,我对
/public/
下的静态文件感兴趣)?我需要这个,以便外部网络应用程序可以访问我的Meteor应用程序提供的数据。有关启用CORS的更多信息。

有两种方法。一种是修改meteor代码并将其添加到中(以便每个文件都有这个头)。这可能不是一个好主意,因为您不希望每个文件都有这个。但若你们真的改变了,那个么就和应用程序挂钩吧

var app = __meteor_bootstrap__.app;
app.use(function(req,res) {
    res.setHeader('access-control-allow-origin', '*');
});
另一种方法是使用自定义路由,例如。通过这种方式,您可以控制要在哪些文件中包含标题,因此最好使用这样的方式

服务器端js:


这是我写的一个小片段。您可以以如何访问meteor的核心连接和修改标题为例,这也是每个meteor项目的一个不错的插件:

/**
*HTTP头安全性
*
*强制实施HTTP严格传输安全(HSTS)以防止ManInTheMiddle攻击
*在支持的浏览器上(除IE外的所有浏览器)
* > http://www.html5rocks.com/en/tutorials/security/transport-layer-security
*
*@header严格的传输安全:最大年龄=2592000;包含子域
*/
var connectHandler=WebApp.connectHandlers;//获取meteor core的connect实现
//用于响应头注入的连接式中间件
Meteor.startup(函数(){
使用(函数(req、res、next){
res.setHeader('Strict-Transport-Security','max age=2592000;includeSubDomains');//2592000秒/30天
返回next();
})
})

我认为这在流星核心的当前状态下是不可能的。我们确实需要一种定制
HTTP
头的方法。难道没有一种黑客的方法吗?如果我想用流星叉,我应该换什么呢?我建议托马斯的答案是正确的。在没有第三方软件包/hack的情况下访问connect中间件的干净方法。Akshat,在这种情况下是否可以使用readFileSync来减少代码?@Akshat澄清点。。。你是在说在流星核心进行编辑吗?这可以用在你的项目代码中,只要它在服务器上运行就行。我已经试着制作了
app=\uuuuuuuuuMeteor\uuuubootstrap\uuuuuu.app
方法在
server/app.js
(为此目的创建的新文件)上工作,但我一直无法使其工作。我在
0.6.3
上。你有没有可能在某个地方有一个例子?
\uuuuuMeteor\u bootstrap\uuuuuu.app
已经被重命名,我认为新的表单是
WebApp.connectHandlers
,但是你还需要添加WebApp包(使用
meteor add WebApp
)。使用最新版本的meteor(0.8.2)您可以使用
WebApp.rawConnectHandlers
的“钩子”,看看我把它放在哪里?
Meteor.Router.add('/yourfile.txt', function() {
    this.response.setHeader('access-control-allow-origin', '*');

    var fs = Npm.require("fs");
    return fs.readFileSync("/public/yourfile.txt", "utf8");

});