似乎在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提出问题。
答案 0 :(得分:0)
@David Weldon回答了问题的一部分,如何呈现服务器端路由:Server side routes in Iron Router and Meteor。中间件没有解决另一半,即身份验证。这里有一个关于这个的问题:Authentication on Server side routes in Meteor