Express - 用户成功登录后尝试重定向

时间:2017-04-14 19:21:32

标签: node.js express handlebars.js

我显然没有获得一些核心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')})
});

1 个答案:

答案 0 :(得分:0)

您不能同时在同一请求中重定向和呈现新页面。

重定向是对一个请求的响应,并告诉客户端发出另一个请求。

然后,客户端可以发出另一个您发送另一个响应的请求。这是一个两步的过程。 (如果你想进行重定向。)

您需要在重定向重定向到的目标路由的GET处理程序中向模板提供正确的数据,而不是在重定向重定向的源路由的POST处理程序中。

如果需要,您可以使用connect-flash模块在​​这两个请求之间传递数据,但您也可以在secind请求的处理程序中使用会话数据。

请参阅:

文档中有很好的例子。