从零学习node.js之利用express搭建简易论坛(七)

2020-06-17 06:42:22易采站长站整理

首先编写一个登录页面:


// views/login.ejs

<!DOCTYPE html>
<html>
<head>
<title>登录</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<style type="text/css">
.tip{color: #f00;}
</style>
</head>
<body>
<div class="container">
<p><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" >回到首页</a></p>
<h1>登录</h1>
<form action="/user/login/" method="post">
<% if(errmsg){ %>
<p class="tip">*<%= errmsg %></p>
<% } %>
<p>用户名: <input type="text" name="username" required="required"></p>
<p>密 码: <input type="password" name="password" required="required"></p>
<p><input type="submit" name="submit" value="submit"></p>
</form>
<p>还没帐号?<a href="/user/reg" rel="external nofollow" >点击注册</a></p>
</div>
</body>
</html>

然后在model/user.js中添加上对数据库的登录操作:


module.exports = {
// ...

// 登录
login : function(username, password, cb){
pool.getConnection(function(err, connection){
if(err) throw err;

connection.query('SELECT `id` FROM `user` WHERE `username`=? AND `password`=?', [username, password], function(err, result){
if(err) throw err;

cb(result);
connection.release();
// 接下来connection已经无法使用,它已经被返回到连接池中
})
});
}
}

最后在routes/user.js中添加上登录的路由:


// routes/user.js

// 进入到登录页面
router.get('/login', function(req, res, next) {
res.render('login', {errmsg:''});
});

// 处理登录请求
router.post('/login', function(req, res, next) {
var username = req.body.username || '',
password = req.body.password || '';

var password_hash = user_m.hash(password);

user_m.login(username, password_hash, function(result){
if(result.length){
// console.log( req.session );
// req.session.user = {
// uid : result[0].id,
// username : username
// }
// res.redirect('/');
res.send('登录成功');
}else{
// console.log('登录失败');
res.render('login', {errmsg:'用户名或密码错误'});
}
});
});

登录功能也编写好了。

3.3 保存登录状态

我们通常是使用session来保存用户的登录状态,express框架没有对session处理的功能,需要我们引入额外的模块express-session: