【问题标题】:How to add CORS headers to a Meteor app?如何将 CORS 标头添加到 Meteor 应用程序?
【发布时间】:2013-04-04 06:44:23
【问题描述】:

如何在 Meteor 中将Access-Control-Allow-Origin: * 标头添加到所有响应(特别是我对/public/ 下的静态文件感兴趣)?我需要这个,以便外部网络应用程序可以访问我的 Meteor 应用程序提供的数据。有关启用 CORS 的更多信息is here

【问题讨论】:

  • 我认为在流星核心的当前状态下这是不可能的。我们肯定需要一种方法来自定义 HTTP 标头。
  • 难道就没有一种骇人听闻的方式吗?如果我想使用 Meteor 的一个分支,我应该为此改变什么?
  • 我建议托马斯的答案是正确的,现在。无需第三方包/黑客即可访问连接中间件的干净方式。

标签: meteor cors


【解决方案1】:

这是我写的一个小sn-p。您可以以如何访问流星的核心连接和修改标头为例,这也是每个流星项目的一个很好的插件:

/**
 * HTTP Header Security
 *
 * enforce HTTP Strict Transport Security (HSTS) to prevent ManInTheMiddle-attacks
 * on supported browsers (all but IE)
 * > http://www.html5rocks.com/en/tutorials/security/transport-layer-security
 *
 * @header Strict-Transport-Security: max-age=2592000; includeSubDomains
 */

var connectHandler = WebApp.connectHandlers; // get meteor-core's connect-implementation

// attach connect-style middleware for response header injection
Meteor.startup(function () {
  connectHandler.use(function (req, res, next) {
    res.setHeader('Strict-Transport-Security', 'max-age=2592000; includeSubDomains'); // 2592000s / 30 days
    return next();
  })
})

【讨论】:

【解决方案2】:

有两种方法可以解决这个问题。一种是修改流星代码并将其添加(以便每个文件都有这个标题)。这可能不是一个好主意,因为您不希望每个文件都有这个。但是,如果您确实进行了更改,请通过挂钩到应用程序来实现

var app = __meteor_bootstrap__.app;
app.use(function(req,res) {
    res.setHeader('access-control-allow-origin', '*');
});

另一种是使用带有meteor router 之类的自定义路由。通过这种方式,您可以控制要在哪些文件中包含标题,因此最好使用类似这样的文件

服务器端js:

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");

});

【讨论】:

  • Akshat,在这种情况下是否可以使用 readFileSync 来减少代码?
  • @akshat 澄清点...您是在谈论在流星核心中进行编辑吗?某处:github.com/meteor/meteor/blob/master/tools/server/… ?
  • 这可以在你的项目代码中使用,只要它运行在服务器上
  • 我试图让app = __meteor_bootstrap__.app; 方法在server/app.js(为此目的创建的一个新文件)上工作,但我无法让它工作。我在0.6.3。你有没有机会在某个地方举个例子?
  • __meteor_bootstrap__.app已经改名了,我觉得要使用的新形式是WebApp.connectHandlers,但是还需要添加WebApp包(带meteor add webapp)。
猜你喜欢
  • 2020-03-16
  • 2019-03-15
  • 2017-04-16
  • 2016-05-15
  • 2019-09-05
  • 2017-11-09
  • 2012-05-26
  • 2019-02-21
  • 1970-01-01
相关资源
最近更新 更多