Каква информация за заявителя е достъпна, когато се навигира до 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

meatier.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 входящо съобщение и вторият аргумент очевидно е NodeJS HTTP сървърен отговор. Третият аргумент е функцията, която трябва да извикате, след като сте готови, различни технологии за рутери използват подобна стратегия (iron:router, ExpressJS, ...).

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

За да приложите това, предлагам да преминете през пакетен подход, за да гарантирате, че промяната на тези манипулатори на връзката ще се случи, когато пожелаете, преди вашия приложението се зарежда.
Освен това ще ви позволи да го използвате повторно навсякъде.

И накрая, имайте предвид, че пакетът webapp по своята същност е достъпен само на сървъра.

person Kyll    schedule 13.10.2015