Подтвердить что ты не робот

Как получить доступ к параметрам запроса в Meteor?

Я планирую использовать Meteor для приложения регистрации в реальном времени для различных Мое требование довольно просто, я передам сообщение журнала как параметр запроса (POST или GET) из разных приложений, а Метеор должен просто обновить коллекцию. Мне нужно получить доступ к параметрам запроса в коде сервера Meteor и обновить коллекцию Mongo с помощью входящего logMessage. Я не могу обновить Mongo Collection непосредственно из существующих приложений, поэтому, пожалуйста, никаких ответов, предлагающих то же. Я хочу знать, как это сделать из структуры Meteor и не делать этого, добавляя больше пакетов.

4b9b3361

Ответ 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. Это, вероятно, технически проще всего сделать.