[英]Meteor middleware and Server side routes
看來,在Meteor中,如果沒有正常工作流程(根據我對服務器端路由的了解)進行某種變通,就無法調用服務器端路由將文件呈現到頁面。 我希望我對此是錯誤的,並且有一種簡單的方法可以實現我想要做的事情...
我使用的是最新的Iron Router 1. *和Meteor 1. *,首先,我使用的是Accounts-password。
我有一個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'}
);
在同一個文件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代碼。
對異常的見解可以在這里找到: 關於異常的問題
問題4:我看過一些地方將中間件用於服務器端路由,例如:
WebApp.connectHandlers.stack.splice(...);
WebApp.connectHandlers.use(function(...) ...);
但是這些示例都沒有內部安全性,以這種方式使用中間件是否可以解決我的問題?
注意:該問題是此處找到的一個較大的SO問題的子集,但我認為我將對此進行細分,因為該主題確實值得其自己的問題IMO。
@David Weldon回答了問題的一部分,即如何呈現服務器端路由: Iron Router和Meteor中的服務器端路由 。 中間件不能解決另一半,即身份驗證。 關於此的一個SO問題已經發布: Meteor中服務器端路由上的身份驗證
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.