Я планирую использовать Meteor для приложения регистрации в реальном времени для различных Мое требование довольно просто, я передам сообщение журнала как параметр запроса (POST или GET) из разных приложений, а Метеор должен просто обновить коллекцию. Мне нужно получить доступ к параметрам запроса в коде сервера Meteor и обновить коллекцию Mongo с помощью входящего logMessage. Я не могу обновить Mongo Collection непосредственно из существующих приложений, поэтому, пожалуйста, никаких ответов, предлагающих то же. Я хочу знать, как это сделать из структуры Meteor и не делать этого, добавляя больше пакетов.
Как получить доступ к параметрам запроса в Meteor?
Ответ 1
EDIT: Обновлено для использования 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 и другие типы запросов должны работать одинаково; это работает на Метеор 0.6.2.1. Убедитесь, что этот код находится внутри блока Meteor.isServer
или в файле в папке /server
в вашем проекте.
Я знаю, что вопросник не хочет добавлять пакеты, но я думаю, что используя Meteorite для установки Метеор Маршрутизатор кажется мне более надежным способом реализации этого по сравнению с доступом к внутренним недокументированным объектам Meteor, таким как __meteor_bootstrap__
. Когда API-интерфейс пакета завершен в будущей версии Meteor, процесс установки Meteor Router станет проще (нет необходимости в Meteorite), но ничего больше не изменится, и ваш код, вероятно, продолжит работу без изменения.
Ответ 2
Я нашел обходное решение для добавить маршрутизатор в приложение 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)
Ответ 3
Используйте IronRouter, это так просто:
var path = IronLocation.path();
Ответ 4
По мере того, как URL-адреса попадают, на стороне сервера не поддерживается маршрутизация на стороне сервера или определенные действия на стороне сервера. Так что нелегко делать то, что вы хотите. Вот несколько советов.
-
Возможно, вы достигнете того, чего хотите, используя методы заимствования, которые используются пакетом
oauth2
в ветке auth: https://github.com/meteor/meteor/blob/auth/packages/accounts-oauth2-helper/oauth2_server.js#L100-109Однако это не поддерживается, поэтому я не уверен, что это хорошая идея.
-
Ваши другие приложения могут реально обновлять коллекции, используя DDP. Это, вероятно, проще, чем кажется.
-
Вы можете использовать промежуточное приложение, которое принимает запросы POST/GET и разговаривает с вашим сервером метеоров, используя DDP. Это, вероятно, технически проще всего сделать.
Ответ 5
Может, этот поможет вам? http://docs.meteor.com/#meteor_http_post