2013-10-05 46 views
0

而不是檢查每個控制器中我想使用app.all('*')來檢查用戶是否已通過身份驗證,並且它已經很好地工作。如果用戶登錄,我只需撥打next(),如果他不是,我打電話給其他路線顯示登錄頁面。使用明文從node.js中的中間件呈現玉模板

到目前爲止好,但似乎從中間件回調函數呈現某種方式弄亂我的路徑,例如樣式表不起作用,當我在頁面源中單擊它時,我再次登陸索引頁。

概括起來,這個工程並顯示我的風格:

app.get('/', function (req, res) { 
    res.render('index', { title: 'Account Page' }); 
}); 

,而這也部分地工作,它只裏顯示,而不從樣式表樣式的HTML:

app.all('*', function (req, res) { 
    app.set('loggedIn', controller.security.authenticationAction(req)); 

    if (app.get('loggedIn')) next(); // go on with '/' route 
    else res.render('index', { title: 'Index Page' }); 
}); 

這也顯示相同的HTML頁面(帶有另一個標題),但沒有樣式。 這是app.js我的默認配置:

app.all('*', function (req, res) { ... }); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.cookieParser('keykeykey')); 

幫助!

回答

0

您的樣式表(可能)由express.static提供服務,在您的app.all()路由之後聲明(使用Express時,無論何時首次聲明路由,路由器中間件都會插入到中間件鏈中,實際上,大多數時候使用app.use(app.router)是無用的,因爲Express已經在幕後插入了它)。

由於請求是由中間件按聲明的順序處理的,因此您的app.all也可以處理對靜態資源的請求。試試你的app.all之前移動靜態中間件:

app.use(express.static(path.join(__dirname, 'public'))); 
app.all('*', function (req, res) { ... }); 

順便說一句,express.favicon()可能會給出類似的問題,如果你想使用任何由express.bodyParserexpress.cookieParser等提供的服務,再次以相同適用)。

+0

謝謝兄弟!我對錶達還很陌生,因爲那個表達骨架的構建器生成了所有這些東西,所以我沒有時間特別檢查每一行。 – codepushr