我计划将Meteor用于各种实时日志记录应用程序 我的要求非常简单,我将从各种应用程序传递日志消息作为请求参数(POST或GET),Meteor需要简单地更新集合。 我需要访问Meteor服务器代码中的请求参数,并使用传入的logMessage更新Mongo集合。我无法直接从现有应用程序更新Mongo Collection,所以请不要回复建议相同的内容。我想知道如何从Meteor框架中做到这一点,而不是通过添加更多包来实现。
答案 0 :(得分:12)
编辑:已更新为使用流星路由器的继任者Iron Router。
Install 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
和{{1}请求各个参数等等。我只测试了GET请求,但POST和其他请求类型应该相同;这适用于Meteor 0.7.0.1。确保将此代码放在this.request.query.src
块或项目的Meteor.isServer
文件夹中的文件中。
原帖:
使用Meteorite安装Meteor Router并定义服务器端路由:
/server
因此,对于Meteor.Router.add('/foo', function() {
doSomethingWithParams(this.request.query);
});
之类的请求,上述函数中的变量http://yoursite.com/foo?q=somequery&src=somesource
将为this.request.query
,因此您可以通过{ q: 'somequery', src: 'somesource' }
和{{1}请求各个参数等等。我只测试了GET请求,但POST和其他请求类型应该相同;这适用于Meteor 0.6.2.1。确保将此代码放在this.request.query.q
块或项目的this.request.query.src
文件夹中的文件中。
我知道提问者不想添加包,但我认为使用Meteorite来安装Meteor Router在我看来,与访问内部无证件相比,实现这一点的方式更加面向未来像Meteor.isServer
这样的流星对象。在未来版本的Meteor中最终确定Package API时,安装Meteor Router的过程将变得更加容易(不需要Meteorite),但没有其他任何内容可能会发生变化,您的代码可能会继续工作而无需修改。
答案 1 :(得分: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)
答案 2 :(得分:2)
使用铁路由器,这很简单:
var path = IronLocation.path();
答案 3 :(得分:0)
就目前而言,当URL被命中时,不支持服务器端路由或服务器端的特定操作。所以做你想做的事并不容易。以下是一些建议。
您可以通过借用auth分支上oauth2
包使用的技术来实现您的目标:https://github.com/meteor/meteor/blob/auth/packages/accounts-oauth2-helper/oauth2_server.js#L100-109
然而,这并不是真的支持,所以我不确定这是个好主意。
您的其他应用程序实际上可以使用DDP更新集合。这可能比听起来容易。
您可以使用接受POST / GET请求的中间应用程序,并使用DDP与您的流星服务器进行通信。这可能是技术上最容易做到的事情。
答案 4 :(得分:-1)
也许这个会帮到你? http://docs.meteor.com/#meteor_http_post