我计划将 Meteor 用于各种实时日志记录应用程序我的要求非常简单,我将从各种应用程序传递一个日志消息作为请求参数(POST 或 GET),而 Meteor 需要简单地更新一个集合。我需要访问 Meteor 服务器代码中的请求参数并使用传入的 logMessage 更新 Mongo 集合。我无法直接从现有应用程序更新 Mongo Collection,因此请不要回复建议相同的内容。我想知道如何从 Meteor 框架中做到这一点,而不是通过添加更多包来做到这一点。
5 回答
编辑:更新为使用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),但其他任何事情都不会改变,您的代码可能会继续工作而无需修改。
我找到了一种解决方法,可以将路由器添加到 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)
使用 IronRouter,就这么简单:
var path = IronLocation.path();
就目前而言,当 URL 被命中时,不支持服务器端路由或服务器端的特定操作。因此,做自己想做的事并不容易。这里有一些建议。
您可以通过借用
oauth2
auth 分支上的包使用的技术来实现您想要的:https ://github.com/meteor/meteor/blob/auth/packages/accounts-oauth2-helper/oauth2_server.js#L100 -109然而,这并没有得到真正的支持,所以我不确定这是一个好主意。
您的其他应用程序实际上可以使用 DDP 更新集合。这可能比听起来容易。
您可以使用接受 POST/GET 请求并使用 DDP 与您的流星服务器对话的中间应用程序。这可能是技术上最简单的事情。
也许这个会帮助你? http://docs.meteor.com/#meteor_http_post