Какая информация о запросителе доступна при переходе по URL-адресу (из Meteor)?

Если пользователь переходит по URL-адресу в вашем приложении Meteor, например «platypus.meteor.com/nfnoscar», существует ли событие, которое может считывать информацию об устройстве пользователя, например, через объект HttpRequest или что-то в этом роде?

IOW, какая информация о контексте инициатора запроса доступна при переходе по URL-адресу? Можно ли прочитать возможности запрашивающего устройства? Что-либо?

ОБНОВИТЬ

Я попытался проверить идею MasterAM с помощью этого кода:

Template.garrapatabeach.rendered = function() {
   var req = request;
   alert(req);
}

... но я получаю:

=> Exited with code: 8
. . .
W20151012-09:48:06.548(-7)? (STDERR) ReferenceError: Template is not defined
W20151012-09:48:06.549(-7)? (STDERR)     at meatier.js:8:1

Митьер.js строка 8:

Template.garrapatabeach.rendered = function() {

У меня есть шаблон с таким именем:

<template name="garrapatabeach">

... так что я не знаю, в чем жалоба... Конечно, он знает, что такое «Шаблон». Для полного раскрытия, вот весь консольный дамп ошибки:

=> Exited with code: 8
W20151012-09:48:06.543(-7)? (STDERR)
W20151012-09:48:06.547(-7)? (STDERR) C:\Users\clayshan\AppData\Local\.meteor\pac
kages\meteor-tool\1.1.9\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\
fibers\future.js:245
W20151012-09:48:06.547(-7)? (STDERR)
throw(ex);
W20151012-09:48:06.548(-7)? (STDERR)
      ^
W20151012-09:48:06.548(-7)? (STDERR) ReferenceError: Template is not defined
W20151012-09:48:06.549(-7)? (STDERR)     at meatier.js:8:1
W20151012-09:48:06.549(-7)? (STDERR)     at C:\Misc\meatier\.meteor\local\build\
programs\server\app\meatier.js:32:4
W20151012-09:48:06.550(-7)? (STDERR)     at C:\Misc\meatier\.meteor\local\build\
programs\server\boot.js:242:10
W20151012-09:48:06.550(-7)? (STDERR)     at Array.forEach (native)
W20151012-09:48:06.550(-7)? (STDERR)     at Function._.each._.forEach (C:\Users\
clayshan\AppData\Local\.meteor\packages\meteor-tool\1.1.9\mt-os.windows.x86_32\d
ev_bundle\server-lib\node_modules\underscore\underscore.js:79:11)
W20151012-09:48:06.551(-7)? (STDERR)     at C:\Misc\meatier\.meteor\local\build\
programs\server\boot.js:137:5
W20151012-09:48:23.969(-7)? (STDERR)
W20151012-09:48:23.970(-7)? (STDERR) C:\Users\clayshan\AppData\Local\.meteor\pac
kages\meteor-tool\1.1.9\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\
fibers\future.js:245
W20151012-09:48:23.971(-7)? (STDERR)
throw(ex);
W20151012-09:48:23.971(-7)? (STDERR)
      ^
W20151012-09:48:23.971(-7)? (STDERR) ReferenceError: Template is not defined
W20151012-09:48:23.972(-7)? (STDERR)     at meatier.js:8:1
W20151012-09:48:23.972(-7)? (STDERR)     at C:\Misc\meatier\.meteor\local\build\
programs\server\app\meatier.js:32:4
W20151012-09:48:23.972(-7)? (STDERR)     at C:\Misc\meatier\.meteor\local\build\
programs\server\boot.js:242:10
W20151012-09:48:23.973(-7)? (STDERR)     at Array.forEach (native)
W20151012-09:48:23.973(-7)? (STDERR)     at Function._.each._.forEach (C:\Users\
clayshan\AppData\Local\.meteor\packages\meteor-tool\1.1.9\mt-os.windows.x86_32\d
ev_bundle\server-lib\node_modules\underscore\underscore.js:79:11)
W20151012-09:48:23.973(-7)? (STDERR)     at C:\Misc\meatier\.meteor\local\build\
programs\server\boot.js:137:5

person B. Clay Shannon    schedule 12.10.2015    source источник
comment
Это полностью зависит от кода маршрутизации. Навигация может инициировать или не активировать соединение DDP. Я не проверял это сам, но request (объект запроса узла) должен быть доступен серверу. В любом случае, я не думаю, что навигация — это действие, гарантирующее обмен информацией между клиентом и сервером, в отличие от традиционных веб-приложений. Вы стремитесь к какой-то аналитике?   -  person MasterAM    schedule 12.10.2015
comment
Это было бы здорово, спасибо!   -  person B. Clay Shannon    schedule 12.10.2015
comment
Не возражаете, если я отредактирую вашу попытку и немного освежу ваш вопрос?   -  person Kyll    schedule 13.10.2015


Ответы (1)


Используя пакет webapp, вы можете получить доступ к обработчикам HTTP-соединений Meteor.
Вы можете подключить свои собственные логика к обработчикам соединения такова:

WebApp.rawConnectHandlers.use('/somepath', (req, res, next) => {
  console.log(`received request with headers : ${req.headers}`)
  next()
})

Документы рекламируют connectHandlers, но я никогда не мог заставить их работать!
Подробнее о функции со стрелками и Строки шаблона Магия ES2015

Поскольку согласно документации, первым аргументом обратного вызова является Входящее сообщение NodeJS HTTP, а второй аргумент, очевидно, является Ответ HTTP-сервера NodeJS. Третий аргумент — это функция, которую вы должны вызвать после того, как закончите, различные технологии маршрутизатора используют аналогичную стратегию (iron:router, ExpressJS, ...).

Поскольку у вас есть доступ к необработанному запросу, вы можете получить доступ ко всей информации, которую предоставляет вам Node (хост, пользовательский агент,...), и вы можете изменить ответ на например, изменить настройки кэша.

Чтобы реализовать это, я предлагаю использовать пакетный подход, чтобы гарантировать, что изменение этих обработчиков соединений произойдет, когда вы хотите, до того, как вы приложение загружается.
Это также позволит вам повторно использовать его где угодно.

Наконец, обратите внимание, что пакет webapp по своей природе доступен только на сервере.

person Kyll    schedule 13.10.2015