当导航到URL(从Meteor内部)时,关于请求者的哪些信息是可用的



如果用户导航到流星应用程序中的URL,例如"platypus.meteor.com/nfnoscar",是否有一个事件可以读取有关用户设备的信息,例如通过HttpRequest对象或其他东西?

那么,当导航到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:UsersclayshanAppDataLocal.meteorpac
kagesmeteor-tool1.1.9mt-os.windows.x86_32dev_bundleserver-libnode_modules
fibersfuture.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:Miscmeatier.meteorlocalbuild
programsserverappmeatier.js:32:4
W20151012-09:48:06.550(-7)? (STDERR)     at C:Miscmeatier.meteorlocalbuild
programsserverboot.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
clayshanAppDataLocal.meteorpackagesmeteor-tool1.1.9mt-os.windows.x86_32d
ev_bundleserver-libnode_modulesunderscoreunderscore.js:79:11)
W20151012-09:48:06.551(-7)? (STDERR)     at C:Miscmeatier.meteorlocalbuild
programsserverboot.js:137:5
W20151012-09:48:23.969(-7)? (STDERR)
W20151012-09:48:23.970(-7)? (STDERR) C:UsersclayshanAppDataLocal.meteorpac
kagesmeteor-tool1.1.9mt-os.windows.x86_32dev_bundleserver-libnode_modules
fibersfuture.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:Miscmeatier.meteorlocalbuild
programsserverappmeatier.js:32:4
W20151012-09:48:23.972(-7)? (STDERR)     at C:Miscmeatier.meteorlocalbuild
programsserverboot.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
clayshanAppDataLocal.meteorpackagesmeteor-tool1.1.9mt-os.windows.x86_32d
ev_bundleserver-libnode_modulesunderscoreunderscore.js:79:11)
W20151012-09:48:23.973(-7)? (STDERR)     at C:Miscmeatier.meteorlocalbuild
programsserverboot.js:137:5

使用webapp包可以访问Meteor的HTTP连接处理程序。
您可以将自己的逻辑与连接处理程序挂钩,如下所示:

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

医生宣传connectHandlers,但我永远无法使这些工作!
查看更多关于箭头函数和模板字符串ES2015 magic

根据文档,回调的第一个参数是NodeJS HTTP传入消息,第二个参数显然是NodeJS HTTP服务器响应。第三个参数是你完成后必须调用的函数,各种路由器技术使用类似的策略(iron:router, ExpressJS,…)。

由于您可以访问原始请求,因此您可以访问Node提供给您的所有信息(主机,用户代理,…),并且您可以更改响应以更改缓存设置。

为了实现这一点,我建议通过包的方法来确保这些连接处理程序的更改发生在你想要的时候,在你的应用程序加载之前。
它还允许您在任何地方重用它。

最后,请注意,webapp包本质上只在服务器上可用。

最新更新