Node/Express/Jade 将用户名传递回视图

Node/Express/Jade passing username back to view

这是我使用所有这些技术的第一个项目,我通常会这样做 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' 时我在结果中设置的值丢失了,但是,因为它也传递了这个错误对象以显示在屏幕上,我不确定我将如何着手确保显示此错误并使值通过。现在,我的文字只是说 'welcome' 而不是 'welcome to xx',这是测试代码,我只是在证明该值没有被传递。

我的问题是,将值传递到我的模板并触发显示的错误消息的正确方法是什么。

代码,当我进入它时,深入到 Express 并检查那里的错误。

您好,很高兴看到一些开发人员从事慈善工作。

假设这是一个中间件,通常你会使用这样的东西

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()
     }        
  }
}

然后在你的玉石上显示你使用的错误和用户ID

p #{userID}
p #{error}

因此,为了回答您的问题,将值发送给 jade 的正确方法是使用它传递它并将错误作为变量传递。

 return res.render(template_name,{userId: req.body.email,error: msg}) 

希望对您有所帮助