Meteor 中间件和服务器端路由
Meteor middleware and Server side routes
似乎在 Meteor 中,我们无法调用服务器端路由来将文件呈现到页面,而无需从我们的正常工作流程中进行某种变通,根据我对服务器端路由的了解。我希望我错了,有一种简单的方法可以实现我想要做的事情...
Software/Versions
我正在使用最新的 Iron Router 1.* 和 Meteor 1.* 并且开始时,我只使用帐户密码。
Background/Context
我有一个 onBeforeAction,它根据用户是否登录将用户重定向到欢迎页面或主页:
both/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'}
);
在同一个文件 both/routes.js 中,我有一个简单的服务器端路由,可以将 pdf 呈现到屏幕上,如果我删除 onBeforeAction 代码,该路由就可以工作(pdf 呈现到页):
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
我的问题
Question 4: I've seen a few places where middle ware is used for
server side routes, for example:
WebApp.connectHandlers.stack.splice(...);
WebApp.connectHandlers.use(function(...) ...);
But none of these examples had security inside, will using middle ware
in this way allow me to get around my problem?
注意:这个问题是发现的一个更大的 SO 问题的一个子集 here,但我想我应该把它分开,因为这个主题真的值得 IMO 自己提出问题。
@David Weldon 回答了问题的一部分,如何渲染服务端路由:Server side routes in Iron Router and Meteor. Middleware doesn't solve the other half, which is authentication. A SO question has been posted about that here:
似乎在 Meteor 中,我们无法调用服务器端路由来将文件呈现到页面,而无需从我们的正常工作流程中进行某种变通,根据我对服务器端路由的了解。我希望我错了,有一种简单的方法可以实现我想要做的事情...
Software/Versions
我正在使用最新的 Iron Router 1.* 和 Meteor 1.* 并且开始时,我只使用帐户密码。
Background/Context
我有一个 onBeforeAction,它根据用户是否登录将用户重定向到欢迎页面或主页:
both/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'}
);
在同一个文件 both/routes.js 中,我有一个简单的服务器端路由,可以将 pdf 呈现到屏幕上,如果我删除 onBeforeAction 代码,该路由就可以工作(pdf 呈现到页):
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
我的问题
Question 4: I've seen a few places where middle ware is used for server side routes, for example:
WebApp.connectHandlers.stack.splice(...);
WebApp.connectHandlers.use(function(...) ...);
But none of these examples had security inside, will using middle ware in this way allow me to get around my problem?
注意:这个问题是发现的一个更大的 SO 问题的一个子集 here,但我想我应该把它分开,因为这个主题真的值得 IMO 自己提出问题。
@David Weldon 回答了问题的一部分,如何渲染服务端路由:Server side routes in Iron Router and Meteor. Middleware doesn't solve the other half, which is authentication. A SO question has been posted about that here: