当前位置: 首页 > 面试题库 >

使用服务器路由和onBeforeAction时发生异常

索和璧
2023-03-14
问题内容

尝试添加pdf文件生成时,我看到奇怪的行为。

在if语句上,以下代码将引发:both \ routes.js

Router.onBeforeAction(function () {   if (!Meteor.user() || Meteor.loggingIn()) {
    this.redirect('welcome.view');   }   else {
    Meteor.call("userFileDirectory", function (error, result) {
      if (error)
        throw error;
      else
        console.log(result);
 });
    this.next();   } }, {   except: ['welcome.view'] });

错误:只能在方法调用中调用Meteor.userId。在发布函数中使用this.userId。在[对象Object]
.Router处的Object.Meteor.user(packages / accounts-base /
accounts_server.js:24:1)处的Object.Meteor.userId(packages / accounts-base /
accounts_server.js:19:1)。包中的onBeforeAction.except(app / both / 3-router /
routes.js:10:15)/ [对象对象]
._。extend.withValue(程序包/iron:router/lib/router.js:277:1)(packages /在[object
Object] .hookWithOptions(packages / iron:router / lib /
router.js:276:1)处的流星/dynamics_nodejs.js:56:1)在boundNext(packages /
iron:middleware-stack / lib / middleware_stack.js)
:251:1)在runWithEnvironment(packages / meteor /
dynamics_nodejs.js:108:1)在package / meteor /
dynamics_nodejs.js:121:1在[object Object] .dispatch(packages /
iron:middleware-stack / lib / middleware_stack.js:275:1)

仅当我将此代码添加到文件中并且采用/ pdf路由时:

Router.route('/pdf', function() {
  var filePath = process.env.PWD + "/server/.files/users/test.pdf";
  console.log(filePath);
  var fs = Npm.require('fs');
  var data = fs.readFileSync(filePath);
  this.response.write(data);
  this.response.end();
}, {
  where: 'server'
});

上面的代码工作正常;当我取出onBeforeAction代码时,pdf会呈现到屏幕上,并且不会引发任何异常。

相反,如果我删除服务器路由,则没有路由会导致异常。


问题答案:

发生这种情况是因为您使用的路由是服务器端路由。Meteor用于验证用户身份的技术是通过Web套接字通过DDP协议完成的。

当您的浏览器向服务器发出GET/ POST请求时,它没有有关用户身份验证状态的任何信息。

Meteor.user()在中使用,Route.onBeforeAction但无法访问此信息。

解决方案是找到一种验证用户身份的替代方法。一种这样的方法是使用cookie。

这是Meteor身份验证系统的已知问题,请参阅:https : //github.com/EventedMind/iron-
router/issues/649



 类似资料:
  • 问题内容: 我一直在思考,我对客户端和服务器之间的路由感到困惑。假设我在将请求发送回Web浏览器之前使用ReactJS进行服务器端渲染,并使用react- router作为客户端路由在页面之间切换而不刷新为SPA。 我想到的是: 路线如何解释?例如,从首页()到帖子页面()的请求 路由在服务器端还是客户端去哪里? 它如何知道如何处理? 问题答案: 注意,此答案涵盖了React Router版本0.

  • 我想到的是: 路线是如何解释的?例如,从主页()到帖子页()的请求 路由在服务器端还是客户端? 它如何知道它是如何处理的?

  • 我有一个相当简单的Spring CloudNetflix设置。我们使用Zuul作为反向代理,Eureka用于服务发现和注册。我们有我们正在慢慢窒息的遗留服务。我们有许多简单的服务,其endpoint配置如下: 因此,现在当每个服务都在eureka注册并随后向Zuul添加路由时,zuul终结点如下所示: 我想阻止Zuul将前缀从eureka服务的路由URI中剥离,以便我的Zuulendpoint如下

  • 我想把react-route添加到我的应用程序中,我有下面的代码: 更新:已安装react-router 3.0.2并工作。

  • { "cluster": "...", "route_config_name": "...", "refresh_delay_ms": "..." } cluster (required, string) 承载路由发现服务的上游群集的名称。群集必须实现和运行RDS HTTP API的REST服务。注:这是在群集管理器配置中定义的群集的名称,而不是群集的完整定义,如SDS和CDS的情况

  • 路由发现服务(RDS)的API在Envoy里面是一个可选API,用于动态获取路由配置。路由配置包括HTTP头部修改,虚拟主机以及每个虚拟主机中包含的单个路由规则。每个HTTP连接管理器都可以通过API独立地获取自己的路由配置。 v1 API 参考 v2 API 参考 统计 RDS的统计树以 http.<stat_prefix>.rds.<route_config_name>..为根,route_c