2017-04-14 26 views
0

我顯然沒有得到一些核心的Node概念。在從數據庫驗證用戶之後,數據庫返回一個對象(「pass_to_html」)。我想將該對象的結果渲染到使用把手的新頁面上。快速 - 試圖在用戶成功登錄後重定向

從login_handler.js(服務器JS做驗證和推動,並從數據庫中提取)我的縮寫代碼:

function getTheeToDashboard(pass_to_html){ 
    app.post('/dashboard',function(req,res, next){ 
    res.redirect('/dashboard') 
    res.render('dashboard', {view: dashboard, trainer_name: pass_to_html.trainer_data.trainer}); 
    }) 
} 

從dashboard.js

router.get('/', function(req, res, next) { 
res.render('dashboard') 
}); 

從app.js:

app.use('/dashboard', dashboard); 

從dashboard.hbs:

<h1> Welcome {{trainer_name}}! </h1> 

我沒有得到任何錯誤,但顯然app.htmlVerb沒有參與。我試過app.get,app.put和app.post。

**編輯:安裝connect-flash-plus後,這裏是我的修改設置,但仍然沒有喜悅。我想應用程序會重定向到dashbaord頁面並顯示一條消息,但沒有任何內容。 **

App.js

var cookieParser = require('cookie-parser'); 
var session  = require('express-session'); 
var flash = require('connect-flash-plus'); 

var app = express(); 

app.use(session({ 
    secret: 'keyboard cat', 
    cookie: { maxAge: 60000 }, 
    resave: false, 
saveUninitialized: false 
})); 
app.use(flash()); 

登錄處理程序:

function getTheeToDashboard(pass_to_html){ 
    app.get('/flash',function(req,res){ 
    req.flash('info','Flash is back!') 
    res.redirect('/dashboard') 
    }) 
} 

dashboard.js:

router.get('/', function(req, res, next) { 
res.render('dashboard',{messages: req.flash('info')}) 
}); 
+0

爲什麼您的dashboard.js不匹配您要重定向到的/儀表板上?應該不是: 'router.get('/ dashboard',function(req,res,next){ res.render('dashboard',{messages:req.flash('info')}) });' – claya

回答

0

您不能同時重定向並呈現在同一請求了新的一頁。

重定向是對一個請求的響應,並告訴客戶端發出另一個請求。

然後,客戶端可以發出另一個請求,向其發送另一個響應。這是一個兩步過程。 (如果要重定向)

您需要在重定向目標路由的GET處理程序中爲您的模板提供正確的數據,而不是源路由的POST處理程序中,重定向來自。

如果需要,您可以使用connect-flash模塊在這兩個請求之間傳遞數據,但您也可以在secind請求處理程序中使用會話數據。

請參見:

有在docs很好的例子。

+0

謝謝,這應該有效,但我還沒有。我查看了這些中的每一個,並且唯一安裝了半乾淨的是連接閃存加。我得到了它「正在工作」,但我仍然回到試圖找出什麼地方,即使遵循他們的例子沒有改變任何東西,這是我修改後的設置。 – edswartz