我显然没有获得一些核心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 :(得分:0)
您不能同时在同一请求中重定向和呈现新页面。
重定向是对一个请求的响应,并告诉客户端发出另一个请求。
然后,客户端可以发出另一个您发送另一个响应的请求。这是一个两步的过程。 (如果你想进行重定向。)
您需要在重定向重定向到的目标路由的GET处理程序中向模板提供正确的数据,而不是在重定向重定向的源路由的POST处理程序中。
如果需要,您可以使用connect-flash
模块在这两个请求之间传递数据,但您也可以在secind请求的处理程序中使用会话数据。
请参阅:
文档中有很好的例子。