我最近一直在尝试使用Express和SailsJS框架学习节点,并且我们都在努力将数据传递到EJS视图。
我遵循使用{data: 'This is the data'}
将数据传递到视图的正确惯例,但是我经常遇到此数据的问题。
带有护照的应用程序进行身份验证。我可以注册用户并登录但是在视图中使用条件并且传递数据总是一个问题。
AuthContoller.js
const passport = require('passport');
module.exports = {
_config: {
actions: false,
shortcuts: false,
rest: false
},
login: function(req, res) {
passport.authenticate('local', function(err, user, info) {
if ((err) || (!user)) {
return res.send({
message: info.message,
user: user
});
}
req.logIn(user, function(err, user) {
if (err) res.send(err);
return res.view('homepage', {
message: info.message,
user: user
});
});
})(req, res);
},
logout: function(req, res) {
req.logout();
res.redirect('/');
}
};
然后视图的一部分我试图在用户登录时显示注销按钮并在注销时隐藏它。但我经常得到一个用户没有为视图定义错误。
homepage.ejs
<ul class="nav navbar-nav navbar-right">
<li><a href="/signup">Signup</a></li>
<% if (user) { %>
<li><%= user.email %></li>
<li><a href="/logout">Logout</a></li>
<% } else { %>
<li><a href="/login">Login</a></li>
<% } %>
</ul>
我不知道我是否应该将用户保存在会话中,或者它是否与本地人或视图语法有关但我尝试了多种解决方案没有运气。与Express也有同样的问题。
我已尝试在视图中使用if (locals.user)
并停止错误,但它不会更改视图。
TL; DR:我基本上想要在用户登录后创建用户对象,该对象可以在视图中显示可访问多个页面的详细信息。并且知道当没有注册的用户访问网页并且尚未创建用户对象时该怎么做。