Node / Express / Jade将用户名返回查看

时间:2015-03-29 04:50:00

标签: node.js express pug

这是我的第一个使用所有这些技术的项目,我通常会做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并检查那里的错误。

1 个答案:

答案 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}) 

我希望这可以帮助你