这是我的第一个使用所有这些技术的项目,我通常会做Angular,但我正在为一个慈善机构工作(并且热衷于学习节点)。这是第三天。
在登录期间,这是一个名为:
的方法schema.statics.authenticateAndLoad = function(req, res, next) {
var userId = req.body.email;
res.locals.userId = userId;
这应该存储该值,因此不需要重新输入。如果登录失败,则执行以下操作:
return next('Login failed. Please enter your details and try again.');
然后在我的Jade模板中:
if(locals.userId)
p Welcome to #{userId}
else
p Welcome
实际模板有代码可以尝试做我想要的事情:
input(type='text', name='email', id="inputEmail", placeholder="Email", value="#{body.email || ''}")
但这不起作用。
所以,我认为这意味着当我调用'next'时,我在结果中设置的值会丢失,但是,因为它也传递了这个错误对象以显示在屏幕上,我不知道我会怎么做关于确保此错误显示AND使值传递。现在,我的文字只是说“欢迎”而且从不“欢迎来到xx”,这是测试代码,我只是证明价值没有通过。
我的问题是,将值传递给我的模板的正确方法是什么,并且还会触发正在显示的错误消息。
代码,当我介入它时,深入到Express并检查那里的错误。
答案 0 :(得分:1)
嗨,很高兴看到一些开发商在做慈善工作。
通常你会使用的是这样的假设这是一个中间件
schema.statics.authenticateAndLoad = function(req, res, next) {
var userId = req.body.email;
res.locals.userId = userId;
loginFunction(userdetails,function(error,result){
//if there is an error you need to render the page or do a redirect to the
//login page
if(error){
var msg = 'Login failed. Please enter your details and try again.'
return res.render('login',{userId: userId,error: msg})
//this renders the login page and passes req.body.email to the page as userID and the msg as error
}
if(result){
//if this is correct you return next() as you are saying
//you may go through
return next()
}
}
}
然后在您的玉上显示您使用的错误和userID
p #{userID}
p #{error}
所以要回答你的问题,将值发送给jade的正确方法是你使用它传递它并将错误作为变量传递。
return res.render(template_name,{userId: req.body.email,error: msg})
我希望这可以帮助你