19

我计划将 Meteor 用于各种实时日志记录应用程序我的要求非常简单,我将从各种应用程序传递一个日志消息作为请求参数(POST 或 GET),而 Meteor 需要简单地更新一个集合。我需要访问 Meteor 服务器代码中的请求参数并使用传入的 logMessage 更新 Mongo 集合。我无法直接从现有应用程序更新 Mongo Collection,因此请不要回复建议相同的内容。我想知道如何从 Meteor 框架中做到这一点,而不是通过添加更多包来做到这一点。

4

5 回答 5

12

编辑:更新为使用Iron Router, Meteor Router 的继任者。

安装 Iron Router并定义服务器端路由:

Router.map(function () {
  this.route('foo', {
    where: 'server',
    action: function () {
      doSomethingWithParams(this.request.query);
    }
  });
});

所以对于像这样的请求,上面函数中http://yoursite.com/foo?q=somequery&src=somesource的变量this.request.query将是{ q: 'somequery', src: 'somesource' },因此您可以通过this.request.query.q等请求单个参数this.request.query.src。我只测试了 GET 请求,但 POST 和其他请求类型应该可以相同地工作;这适用于 Meteor 0.7.0.1。确保将此代码放在项目文件夹中的Meteor.isServer块或文件中/server

原帖:

使用Meteorite安装Meteor Router并定义服务器端路由:

Meteor.Router.add('/foo', function() {
  doSomethingWithParams(this.request.query);
});

所以对于像这样的请求,上面函数中http://yoursite.com/foo?q=somequery&src=somesource的变量this.request.query将是{ q: 'somequery', src: 'somesource' },因此您可以通过this.request.query.q等请求单个参数this.request.query.src。我只测试了 GET 请求,但 POST 和其他请求类型应该可以相同地工作;这适用于 Meteor 0.6.2.1。确保将此代码放在项目文件夹中的Meteor.isServer块或文件中/server

我知道提问者不想添加包,但我认为使用Meteorite安装Meteor Router与访问内部未记录的 Meteor 对象(如__meteor_bootstrap__. 在 Meteor 的未来版本中最终确定 Package API 时,安装 Meteor Router 的过程将变得更容易(不需要 Meteorite),但其他任何事情都不会改变,您的代码可能会继续工作而无需修改。

于 2013-05-13T06:35:08.657 回答
9

我找到了一种解决方法,可以将路由器添加到 Meteor 应用程序以处理自定义请求。

它使用流星附带的连接路由器中间件。没有额外的依赖!

把它放在服务器上的 Meteor.startup之前/之外。(咖啡稿)

SomeCollection = new Collection("...")
fibers = __meteor_bootstrap__.require("fibers")
connect = __meteor_bootstrap__.require('connect')
app = __meteor_bootstrap__.app

router = connect.middleware.router (route) ->
  route.get '/foo', (req, res) ->
    Fiber () ->
      SomeCollection.insert(...)
    .run()
    res.writeHead(200)
    res.end()
app.use(router)
于 2012-10-10T12:44:29.520 回答
2

使用 IronRouter,就这么简单:

var path = IronLocation.path();
于 2014-06-12T10:59:55.957 回答
0

就目前而言,当 URL 被命中时,不支持服务器端路由或服务器端的特定操作。因此,做自己想做的事并不容易。这里有一些建议。

  1. 您可以通过借用oauth2auth 分支上的包使用的技术来实现您想要的:https ://github.com/meteor/meteor/blob/auth/packages/accounts-oauth2-helper/oauth2_server.js#L100 -109

    然而,这并没有得到真正的支持,所以我不确定这是一个好主意。

  2. 您的其他应用程序实际上可以使用 DDP 更新集合。这可能比听起来容易。

  3. 您可以使用接受 POST/GET 请求并使用 DDP 与您的流星服务器对话的中间应用程序。这可能是技术上最简单的事情。

于 2012-08-06T03:08:14.877 回答
-1

也许这个会帮助你? http://docs.meteor.com/#meteor_http_post

于 2012-08-04T03:56:25.117 回答