express+vue+mongodb+session 实现注册登录功能
主要实现如下功能:
1. 支持注册,登录功能,用户可以注册完成后,进行登录,登录完成后会进入到列表增删改查页面。
2. 支持session会话,也就是说设置了多长时间登录过期,如果用户没有登录,直接进查询列表页面,会重定向到登录页面去,如果用户登录了后,把浏览器关掉,直接输入列表查询页面,会直接进入列表页面的。
3. 列表数据加入了分页功能。
4. 对数据库中的请求加入了日志记录。
先看下效果:
1. 首先服务器重启后,在地址栏中输入 http://localhost:8081/ 后,会重定向到登录页面来,如下图所示:
2. 如果没有账号的话,我们可以注册一个账号,进入注册页面,如下图所示:
3. 如果用户名和密码没有输入,或者输入的格式不合法的话,会如下提示所示:
4. 当用户注册成功后,可以看到如下页面了
5. 我们去登录页面,进行登录,如下:
6. 登录成功后,会跳转到列表页面,如下图所示:
下面的增删改查操作的流程,我就不再介绍了,和我之前的 中的演示是一样的。
7. 下面我们来看看我们的数据库中是否增加了刚刚注册的用户账号了,如下图所示:
上面的四个账号都是我注册的,在数据库中可以看到,注册成功了。
注意:如果某个用户注册过了,你再使用相同的账号继续注册话,是不能注册,会提示该账号已经注册过了,如下图所示:
下面还是来看下我们项目的整个目录架构如下:
### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有的依赖包 | |----database # 数据库相关的文件目录 | | |---db.js # mongoose类库的数据库连接操作 | | |---models # 存放所有模型表 | | | |--- user.js # 增删改查用户数据表 | | | |--- usertable.js # 用户账号表 | |--- app | | |---index | | | |-- views # 存放所有vue页面文件 | | | | |-- list.vue # 列表数据 | | | | |-- index.vue | | | | |-- login.vue # 用户登录页面 | | | | |-- regist.vue # 用户注册页面 | | | |-- components # 存放vue公用的组件 | | | |-- js # 存放js文件的 | | | |-- css # 存放css文件 | | | |-- store # store仓库 | | | | |--- actions.js | | | | |--- mutations.js | | | | |--- state.js | | | | |--- mutations-types.js | | | | |--- index.js | | | | | | | | |-- app.js # vue入口配置文件 | | | |-- router.js # 路由配置文件 | |--- api # 保存所有接口操作的文件 | | |--- addanddelete.js # 增删改查的接口 | | |--- regandlogin.js # 注册登录的接口 | | |--- usersession.js # 用户session有效的接口 | |--- routes # 存放所有的路由文件 | | |--- addanddelete.js # 增删改查路由 | | |--- regandlogin.js # 注册和登录路由 | | |--- usersession.js # session路由 | |--- views | | |-- index.html # html文件 | |--- webpack.config.js # webpack配置文件 | |--- .gitignore | |--- readme.md | |--- package.json | |--- .babelrc # babel转码文件 | |--- app.js # express入口文件
首先我们先看下 根目录下的 app.js 文件代码(服务器代码):
部分代码如下:
// 引入express模块 const express = require('express'); // 引入session const session = require('express-session'); // 创建app对象 const app = express(); // 加载路由 const addanddelete = require('./routes/addanddelete'); const regandlogin = require('./routes/regandlogin'); const usersession = require('./routes/usersession'); const bodyparser = require("body-parser"); const fs = require('fs'); const path = require('path'); // mongoose-morgan const morgan = require('mongoose-morgan'); app.use(bodyparser.json()); app.use(bodyparser.urlencoded({ extended: false })); app.use(session({ secret: 'kongzhi', // 对 session id 相关的cookie 进行加密签名 cookie: { maxage: 1000 * 60 * 10 // 设置 session的有效时间,单位为毫秒,设置有效期为10分钟 } })); // logger 添加数据库操作日志记录 https://www.npmjs.com/package/mongoose-morgan app.use(morgan({ connectionstring: 'mongodb://localhost:27017/datadb' })); // 使用 app.use('/user', addanddelete); app.use('/reglogin', regandlogin); app.use('/user', usersession);
如上代码,加载路由后,然后使用 use了,对应的 routes文件下的js文件,代码分别如下:
1. routes/addanddelete.js 代码如下:
// 引入express 模块 const express = require('express'); const router = express.router(); // 引入user.js const user = require('../api/addanddelete'); router.post('/add', user.add); router.post('/query', user.query); router.post('/del', user.del); router.post('/update', user.update); module.exports = router;
2. routes/regandlogin.js 代码如下:
const express = require('express'); const router = express.router(); const regandlogin = require('../api/regandlogin'); router.post('/regist', regandlogin.registered); router.post('/login', regandlogin.login); // 注销 router.post('/logout', regandlogin.logout); module.exports = router;
3. routes/usersession.js 代码如下:
const express = require('express'); const router = express.router(); const usersession = require('../api/usersession'); router.post('/usersession', usersession.usersession); module.exports = router;
因此对于 app.use('/user', addanddelete);
的时候,会调用 routes/addanddelete.js 下的请求方法,分别为:
/add, /query, /update, /del, 因此在我们列表页面中使用接口方式如:类似于如下这样的:
都是 /user/add, /user/query, /user/update, /user/del 这样的接口,比如说我们使用 /user/add post请求这样的接口的时候,他们会调用到 routes/addanddelete.js 中的router.post('/add', user.add); 这里面的 user.add方法,所以它就会调用到 api/addanddelete.js 中的add函数,如下代码所示:
const user = require('../database/models/user'); // 新增信息 module.exports.add = function(req, res, next) { const user = new user({ name: req.body.name, age: req.body.age, sex: req.body.sex }); user.save((err, docs) => { if (err) { res.send({ 'code': 1, 'errormsg': '新增失败' }); } else { res.send({ "code": 0, 'message': '新增成功' }); } }); next(); };
因此会调用数据库的操作,会在数据库中增加一条数据。如上代码,会应用到 database/models/user 这个表中的代码:
/* 定义一个user的schema */ const mongoose = require('../db.js'); const schema = mongoose.schema; // 创建一个模型 const userschema = new schema({ name: { type: string}, // 属性name,类型为string age: { type: number, default: 30 }, // 属性age,类型为number,默认值为30 sex: { type: string } }); // 导出model模块 const user = module.exports = mongoose.model('user', userschema);
因此会创建user表,并且在表中插入对应的数据。
如上只是解释下增加接口的调用方式,其他的接口设计也是一样的。就不多解释了。对应 /user 这样的,我们在webpack中的devserver中会配置下,解决跨域问题,因为我现在是启动两个服务的,node端的端口是 3001, 而我的webpack的端口是8081, 会存在跨域的,因此webpack的 devserver 需要做如下配置的:
devserver: { port: 8081, // host: '0.0.0.0', headers: { 'x-foo': '112233' }, inline: true, overlay: true, stats: 'errors-only', proxy: { '/user': { target: 'http://127.0.0.1:3001', changeorigin: true // 是否跨域 }, '/combinefile': { target: 'http://127.0.0.1:3001', changeorigin: true, // 是否跨域, pathrewrite: { '^/combinefile' : '' // 重写路径 } }, '/reglogin': { target: 'http://127.0.0.1:3001', changeorigin: true // 是否跨域 } } },
4. app.js 中使用了 mongoose-morgan 这个插件,为了数据库操作接口的时候,写入日志,比如报错的时候可以在服务器端看到报错信息,该api的具体使用可以
看下 npm库()。
如下日志记录:
具体的代码这边就不多解释,有兴趣的话可以去github上下载代码查看下哦。
总结
以上所述是小编给大家介绍的express+vue+mongodb+session 实现注册登录功能,希望对大家有所帮助
下一篇: php layui实现前端多图上传实例
推荐阅读
-
laravel5实现微信第三方登录功能
-
PHP 实现超简单的SESSION与COOKIE登录验证功能示例
-
vue 实现通过手机发送短信验证码注册功能
-
Flask框架通过Flask_login实现用户登录功能示例
-
python+selenium实现京东自动登录及秒杀功能
-
express+vue+mongodb+session 实现注册登录功能
-
JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
-
Android开发之TextView使用intent传递信息,实现注册界面功能示例
-
PHP永久登录、记住我功能实现方法和安全做法
-
php基于登陆时间判断实现一天多次登录只积分一次功能示例