2017-04-14 27 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