我正在组建一个基本的项目管理/管理站点,并决定最终学会使用node / express / monk / jade / redis,这些作品。一切都很顺利,但我遇到了一个问题,试图在index.js中的路由处理程序和jade模板文件之间传递数据。
index.js
中的
exports.auth = function( db )
{
return function( req, res )
{
var userName = req.body.username,
userPassword = req.body.password,
authenticated = false;
// check credentials code
// ...
if (authenticated)
{
// set some session stuff
res.redirect( "home" ); // good to go
}
else
{
res.locals.err = "Authentication error";
res.redirect( "login" ); // show err on login page
}
}
}
login.jade
中的
- if (typeof( locals.err ) !== 'undefined' ) {
p.errormsg #{ locals.err }
- }
在jade模板中迭代locals
,它不会显示err
的条目。 res.redirect()
是否会清除我在index.js
中输入的错误条目?或者我实际上是在处理两个不同的对象(res.locals
中的index.js
和jade模板中的locals
?
我原来的方法是使用res.render( "login", { "err" : "Authentication err" } )
而不是重定向,但我无法弄清楚当错误发生时如何让浏览器显示/login
而不显示/auth
。我试过了
res.location( "login" );
res.render( "login", { "err" : "Authentication err" });
但浏览器仍显示/auth
。
我发现的唯一其他方法是使用会话数据。会话对象在两个地方都可用,我可以根据需要设置/读取信息。虽然会话信息通过重新加载登录页面而持续存在,但是浏览器只是继续显示原始尝试的错误消息而不是重新加载/呈现干净的登录页面。
感谢任何帮助,并提前感谢!
答案 0 :(得分:0)
是 - 重定向正在向客户端返回重定向,从而向客户端发出单独的请求。您之前的res.locals.err
早已不复存在。您可能需要阅读doc on res.redirect()
。
如果您搜索某些javascript,有不同的方法可以处理有关位置栏显示内容的问题。虽然感觉有点像kludge。
就个人而言,我只有/login
路径 - 通过GET
调用它显示登录页面,通过POST
调用它进行身份验证,如果成功则重定向,或者使用以下方式呈现登录模板如果登录错误,则会出错。没有必要的会话数据。