如何在Meteor中访问请求参数?

use*_*936 18 meteor

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

Geo*_*oth 12

编辑:更新为使用铁路由器,流星路由器的继任者.

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

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

因此对于类似的请求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);
});
Run Code Online (Sandbox Code Playgroud)

因此对于类似的请求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路由器在我看来是一种更加面向未来的方式来实现这一点,与访问内部未记录的Meteor对象相比__meteor_bootstrap__.在未来版本的Meteor中最终确定Package API时,安装Meteor Router的过程将变得更加容易(不需要Meteorite),但其他任何内容都不会发生变化,您的代码可能会继续工作而无需修改.


sky*_*hon 9

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

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

把它放在服务器上的Meteor.startup 之前/之外.(CoffeeScript的)

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)
Run Code Online (Sandbox Code Playgroud)


aab*_*rov -1

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