流星中间件和服务器端路由

时间:2015-01-01 17:04:15

标签: node.js meteor routing iron-router middleware

似乎在Meteor中,我们不能调用服务器端路由将文件呈现到页面,而不需要从我们正常的工作流程中解决某些问题,而不是我读过的有关服务器端路由的内容。我希望我对此有所不妥,并且有一种简单的方法来实现我想做的事情......

软件/版本

我正在使用最新的Iron Router 1. *和Meteor 1. *并且开始,我只是使用帐户密码。

背景/背景

我有一个onBeforeAction,根据用户是否登录,只需将用户重定向到欢迎页面或主页:

两者/ routes.js

Router.onBeforeAction(function () {
  if (!Meteor.user() || Meteor.loggingIn())
    this.redirect('welcome.view');
  else
    this.next();
  }
  ,{except: 'welcome.view'}
);

Router.onBeforeAction(function () {
  if (Meteor.user())
    this.redirect('home.view');
  else
    this.next();
  }
  ,{only: 'welcome.view'}
);

在同一个文件中,两个/ routes.js,我都有一个简单的服务器端路由,它将pdf呈现给屏幕,如果我删除onBeforeAction代码,路由可以正常工作(pdf呈现给页面): / p>

Router.route('/pdf-server', 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'});

服务器路由

上抛出异常

除此之外,当我将上述服务器端路由添加到文件并使用路由/ pdf-server时,我得到一个例外,同时保留onBeforeAction代码。

可以在此处找到对例外的见解:SO Question on Exception

我的问题

  

问题4:我看过一些使用中间件的地方   服务器端路由,例如:

WebApp.connectHandlers.stack.splice(...);

WebApp.connectHandlers.use(function(...) ...);
  

但是这些例子中没有一个具有安全性,将使用中间件   这样可以让我解决我的问题吗?

注意:这个问题是here发现的更大SO问题的一个子集,但我认为我打破了这个问题,因为这个话题确实值得IMO提出问题。

1 个答案:

答案 0 :(得分:0)

@David Weldon回答了问题的一部分,如何呈现服务器端路由:Server side routes in Iron Router and Meteor。中间件没有解决另一半,即身份验证。这里有一个关于这个的问题:Authentication on Server side routes in Meteor