对于“Node.js利用Express实现用户注册登陆功能(推荐)”这个主题,我有如下的详细讲解和完整攻略。
1. 准备工作
在开始进行用户注册登陆功能的实现前,需要确保已经安装好了Node.js和Express框架。
2. 创建项目目录和文件
在命令行中,使用如下命令创建项目目录:
mkdir node-login
进入该目录,使用如下命令创建项目文件:
touch app.js routes/index.js routes/user.js views/index.ejs views/login.ejs views/register.ejs
其中,app.js是项目的入口文件,index.js和user.js是路由文件,index.ejs、login.ejs和register.ejs是视图模板文件。
3. 设置依赖
在项目目录下,使用如下命令设置所需的依赖:
npm install express body-parser cookie-parser express-session mongoose connect-mongo --save
这里进行了如下设置:
- express:Express框架;
- body-parser:解析POST请求的中间件;
- cookie-parser:解析Cookie的中间件;
- express-session:会话管理中间件;
- mongoose:MongoDB的ODM框架;
- connect-mongo:将会话存储在MongoDB中的模块。
4. 编写代码
接下来,我们需要进行代码的编写。
首先来看一下app.js的代码:
var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);
var app = express();
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/node-login');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
secret: 'node-login',
resave: true,
saveUninitialized: false,
cookie: {
maxAge: 60000
},
store: new MongoStore({
mongooseConnection: mongoose.connection
})
}));
app.use('/', require('./routes/index'));
app.use('/user', require('./routes/user'));
app.listen(3000, function() {
console.log('Server running at http://localhost:3000/');
});
这里首先引入了所需的依赖,然后设置了MongoDB连接,接着使用了body-parser、cookie-parser和session中间件,并将session存储在MongoDB中,最后设置了路由和监听端口。
然后是index.js的代码:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Node.js Login Tutorial'
});
});
module.exports = router;
这里设置了根路由,并渲染了index视图模板文件。
接下来是user.js的代码:
var express = require('express');
var router = express.Router();
var UserModel = require('../models/user');
router.get('/register', function(req, res, next) {
res.render('register', {
title: 'Register'
});
});
router.post('/register', function(req, res, next) {
var user = new UserModel({
username: req.body.username,
password: req.body.password
});
user.save(function(err, user) {
if(err) {
return next(err);
}
req.session.user = user._id;
res.redirect('/user/profile');
});
});
router.get('/login', function(req, res, next) {
res.render('login', {
title: 'Login'
});
});
router.post('/login', function(req, res, next) {
UserModel.findOne({ username: req.body.username }, function(err, user) {
if(err) {
return next(err);
}
if(!user || user.password !== req.body.password) {
return res.redirect('/user/login');
}
req.session.user = user._id;
res.redirect('/user/profile');
});
});
router.get('/profile', function(req, res, next) {
if(!req.session.user) {
return res.redirect('/user/login');
}
UserModel.findById(req.session.user, function(err, user) {
if(err) {
return next(err);
}
if(!user) {
return res.redirect('/user/login');
}
res.render('profile', {
title: 'Profile',
user: user
});
});
});
router.get('/logout', function(req, res, next) {
req.session.destroy();
res.redirect('/');
});
module.exports = router;
这里设置了/register、/login、/profile和/logout四个路由,分别用于用户注册、用户登陆、用户资料页面和用户退出登录。其中,使用了UserModel模型来进行用户的存储和查询。
最后是视图模板文件。以login.ejs为例:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<% if (message) { %>
<p><%= message %></p>
<% } %>
<form method="post" action="/user/login">
<p>
<label>Username:</label>
<input type="text" name="username" required>
</p>
<p>
<label>Password:</label>
<input type="password" name="password" required>
</p>
<p>
<button type="submit">Login</button>
</p>
</form>
</body>
</html>
这里使用了EJS模板引擎,设置了用户名、密码的输入框和登陆按钮。
5. 运行项目
最后,使用如下命令运行项目:
node app.js
然后在浏览器中访问http://localhost:3000/,即可看到项目的主页。在该主页中,可以选择注册或者登陆。如果成功登陆,可以看到用户的资料页面。在该页面中,可以选择退出登陆。
以上是利用Express实现用户注册登陆功能的完整攻略。如果需要,还可以添加验证码、邮箱激活等其他功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js利用Express实现用户注册登陆功能(推荐) - Python技术站