Node.js + Express 4.x + MongoDB 构建登录注册-简易用户管理(四)
登录和注册的功能算实现了,下面封装DBHelp和增加一个简单的用户管理,这样增删查改就集齐了。
在routes文件夹下面新建DBHelp.js,代码如下:
const MongoClient=require('mongodb').MongoClient; const DB_CONN_STR='mongodb://localhost:27017/userinfo';function DBHelp(){}/************************** * * 功能:条件查询,返回遇到的第一条符合条件的数据 * 参数:tableName(查询的表名)、selectStr(查询条件)、callback(回调函数) * **************************/ DBHelp.prototype.FindOne=function(tableName,selectStr,callback) {MongoClient.connect(DB_CONN_STR,function(err,db){db.collection(tableName).findOne(selectStr,function(err,result){if(err){console.log(err);return;}callback(result);});db.close();}); };/************************** * * 功能:条件查询 * 参数:tableName(查询的表名)、selectStr(查询条件)、callback(回调函数) * **************************/ DBHelp.prototype.Find=function(tableName,selectStr,callback) {MongoClient.connect(DB_CONN_STR,function(err,db){db.collection(tableName).find(selectStr).toArray(function(err,result){if(err){console.log(err);return;}callback(result);});db.close();}); };/************************** * * 功能:查询所有数据,显示指定字段 * 参数:tableName(查询的表名)、selectStr(查询条件)、callback(回调函数) * **************************/ DBHelp.prototype.FindAll=function(tableName,selectStr,callback) {MongoClient.connect(DB_CONN_STR,function(err,db){db.collection(tableName).find({},selectStr).toArray(function(err,result){if(err){console.log(err);return;}callback(result);});db.close();}); };/************************** * * 功能:添加 * 参数:tableName(查询的表名)、dataStr(添加的数据)、callback(回调函数) * **************************/ DBHelp.prototype.Add=function(tableName,dataStr,callback) {MongoClient.connect(DB_CONN_STR,function(err,db){db.collection(tableName).insert(dataStr,function(err){if(err){console.log(err);return false;}else{callback();}});db.close();}); };/************************** * * 功能:删除 * 参数:tableName(查询的表名)、delStr(删除条件)、callback(回调函数) * **************************/ DBHelp.prototype.Delete=function(tableName,delStr,callback) {MongoClient.connect(DB_CONN_STR,function(err,db){db.collection(tableName).remove(delStr,function(err){if(err){console.log(err);return false;}else{callback();}});db.close();}); };/************************** * * 功能:修改 * 参数:tableName(查询的表名)、whereStr(修改条件)、updateStr(修改数据)、callback(回调函数) * **************************/ DBHelp.prototype.Update=function(tableName,whereStr,updateStr,callback) {MongoClient.connect(DB_CONN_STR,function(err,db){db.collection(tableName).update(whereStr,updateStr,function(err){if(err){console.log(err);return false;}else{callback();}});db.close();}); };module.exports=DBHelp;
修改index.js文件,代码如下:
var express = require('express'); var router = express.Router(); const DBHelp=require('./DBHelp');/* GET home page. */ router.get('/', function(req, res, next) {res.render('index', { title: 'Index' }); });//登录 router.route('/login').all(Logined).get(function(req,res) {res.render('login',{title:'Login'}); }).post(function(req,res) {//从前端获取到的用户填写的数据let user={username:req.body.username,password:req.body.password};//用于查询用户名是否存在的条件let selectStr={username:user.username};let dbhelp=new DBHelp();dbhelp.FindOne('users',selectStr,function(result){if(result){if(result.password===user.password){//出于安全,只把包含用户名的对象存入sessionreq.session.user=selectStr;return res.redirect('/home');}else{req.session.error='用户名或者密码错误!';return res.redirect('/login');}}else{req.session.error='账号不存在!';return res.redirect('/login');}}); });//注册 router.route('/register').all(Logined).get(function(req,res) {res.render('register',{title:'Register123'}); }).post(function(req,res) {//从前端获取到的用户填写的数据let newUser={username:req.body.username,password:req.body.password,passwordSec:req.body.passwordSec};//准备添加到数据库的数据(数组格式)let addStr=[{username:newUser.username,password:newUser.password}];//用于查询用户名是否存在的条件// let selectStr={username:newUser.username};let dbhelp=new DBHelp();dbhelp.FindOne('users',{username:newUser.username},function(result){if(!result){if(newUser.password===newUser.passwordSec){dbhelp.Add('users',addStr,function(){req.session.error='注册成功,请登录!';return res.redirect('/login');});}else{req.session.error='两次密码不一致!';return res.redirect('/register');}}else{req.session.error='用户名已存在!';return res.redirect('/register');}}); });//Home用户管理 router.route('/home').all(LoginFirst).get(function(req,res) {let selectStr={username:1,_id:0}let dbhelp=new DBHelp();dbhelp.FindAll('users',selectStr,function(result){if(result){res.render('home',{title:'Home',Allusers:result});}else{res.render('home',{title:'Home'});}}); });//删除 router.route('/delete/:URLusername').get(function(req,res) {if(req.params.URLusername!==req.session.user.username){let whereStr={username:req.params.URLusername};let dbhelp=new DBHelp();dbhelp.Delete('users',whereStr,function(){req.session.error='移除用户 '+whereStr.username+' 成功!';return res.redirect('/home');});}else{req.session.error="不能操作当前登录用户!";return res.redirect('/home');} });//重置密码 router.get('/resetPwd/:URLusername',function(req,res) {if(req.params.URLusername!==req.session.user.username){let whereStr={username:req.params.URLusername};let update={$set:{password:'123456'}};let dbhelp=new DBHelp();dbhelp.Update('users',whereStr,update,function(){req.session.error=whereStr.username+' 的密码已重置为 123456!';return res.redirect('/home');});}else{req.session.error="不能操作当前登录用户!";return res.redirect('/home');} });//注销 router.get('/logout',function(req,res) {req.session.user=null;return res.redirect('/'); });function Logined(req,res,next) {if(req.session.user){req.session.error='您已登录!';return res.redirect('/home');}next(); }function LoginFirst(req,res,next) {if(!req.session.user){req.session.error='请先登录!';return res.redirect('/login');}next(); }module.exports = router;
在home.html中展示简单的用户列表,代码如下:
使用了简单的ejs语法,简单明了,想深入了解的可以自行百度。
<% include header.html %> <%-message%> <h1><%= title %></h1> <p>Welcome<span class="fuzq_home_name"><%= user.username %></span>to <%= title %></p> <a href="/logout">注销</a> <div class="fuzq_home_manage"><h3>用户管理</h3><table class="fuzq_home_manage_table"><tr><th>用户名</th><th>操作</th></tr><% Allusers.forEach(function(u){if(u.username===user.username){%><tr><td style="color:#3c3;"><%-u.username%></td><td><span style="color:#3c3;">当前用户</span></td></tr><%}else{%><tr><td><%-u.username%></td><td><span><a href="/delete/<%-u.username%>">删除</a> | <a href="/resetPwd/<%-u.username%>">重置密码</a></span></td></tr><%}})%></table> </div> <% include footer.html %>
home.html页面的头部和尾部也分开了,分别在views文件夹下新建header.html和footer.html,代码如下:
<!DOCTYPE html> <html><head><title><%= title %></title><link rel='stylesheet' href='/stylesheets/style.css' /></head><body>
</body> </html>
转载于:https://www.cnblogs.com/fu277/p/6743681.html
Node.js + Express 4.x + MongoDB 构建登录注册-简易用户管理(四)相关推荐
- 梦幻西游手游炼药信息采集系统(Node.js+Express+Bower+Bootstrap+Mongodb+Mongoose)
梦幻西游手游炼药信息采集系统 一.初衷 本文不是软文!!!本文不是软文!!!本文不是软文!!!文章开始重要的事情说三遍!!! 初中时玩一款网易的游戏叫<梦幻西游>,前两天看朋友在玩< ...
- Node.js Express+Mongodb 项目实战
Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...
- 从零开始搭建Node.js, Express, Ejs, Mongodb服务器
http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...
- 视频教程-项目实战视频课程:美团小程序(Node.js+Express+支付)-微信开发
项目实战视频课程:美团小程序(Node.js+Express+支付) 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN ...
- TWaver HTML5 + Node.js + express + socket.io + redis(六)
接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...
- 跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-李宁-专题视频课程...
跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-8799人已学习 课程介绍 本课程采用的技术包括小程序开发.Node.js.Express和M ...
- node.js+Express计算机毕业设计基于Web的软考题库平台(程序+LW+部署)
该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...
- [读书笔记]从物联到万联——Node.js与树莓派万维物联网构建实战
前言 本文是"从物联到万联,Node.js与树莓派万维物联网构建实战"一书的读书笔记,该书翻译自"Building the Web of Things with exam ...
- 项目实战视频课程:美团小程序(Node.js+Express+支付)-李宁-专题视频课程
项目实战视频课程:美团小程序(Node.js+Express+支付)-473人已学习 课程介绍 小程序视频教程,本课程实现了美团小程序的核心部分.采用异步的方式,通过AJAX从服务端获 ...
最新文章
- java jnotify_java JNotify (基于内核)实时监控文件
- c++(和opencv)如何把局部变量变成全局变量的功能
- 用 jQuery 获取 iframe 父子页面元素
- 数据挖掘10大算法详细介绍
- 人体反应测试仪 c语言,人体反应速度测试仪毕业设计说明
- 说实话:中文自然语言处理(知识图谱)的N个真实情况
- arXiv 注册流程介绍——详细图解
- classpath和classpath*区别
- 《HTML5+CSS3网页设计入门必读》——1.11 小结
- html如何动态添加样式表,JavaScript动态插入CSS的方法
- 机器视觉运动控制一体机应用|工件同心度检测
- centos7安装steam
- Intel开发手册下载地址
- mongodb数据库扩展名_MongoDB文件型数据库
- 二进制与十进制科学记数法举例
- 怎么删除电脑服务器远程桌面连接,删除远程桌面服务客户端访问许可证
- 自顶向下计算机网络 传输层
- Cadence Allegro导出BOM清单图文教程及视频演示
- word文档怎么调成黑底白字
- 两数相除,如果有余数则结果加一
热门文章
- python 中的下划线
- 看我是怎样让客户更快找到我的!
- 将当前的head推送到远程_git 入门教程之远程仓库
- 从做大牛那里整理的Python函数相关的学习笔记,希望对你有帮助
- java并行任务dispatch_Java模拟 双分派Double Dispatch
- python 打印列表对象,python – 打印对象列表
- .axf文件_干货!STM32晶振的更改,BIN文件的生成
- freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)
- python django web典型模块开发实战下载_Django实战 Python Web典型模块与项目开发
- stm32f103最小系统的组成及各部分功能