登录和注册的功能算实现了,下面封装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>&nbsp;&nbsp;|&nbsp;&nbsp;<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 构建登录注册-简易用户管理(四)相关推荐

  1. 梦幻西游手游炼药信息采集系统(Node.js+Express+Bower+Bootstrap+Mongodb+Mongoose)

    梦幻西游手游炼药信息采集系统 一.初衷 本文不是软文!!!本文不是软文!!!本文不是软文!!!文章开始重要的事情说三遍!!! 初中时玩一款网易的游戏叫<梦幻西游>,前两天看朋友在玩< ...

  2. Node.js Express+Mongodb 项目实战

    Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...

  3. 从零开始搭建Node.js, Express, Ejs, Mongodb服务器

    http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...

  4. 视频教程-项目实战视频课程:美团小程序(Node.js+Express+支付)-微信开发

    项目实战视频课程:美团小程序(Node.js+Express+支付) 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN ...

  5. TWaver HTML5 + Node.js + express + socket.io + redis(六)

    接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...

  6. 跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-李宁-专题视频课程...

    跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-8799人已学习 课程介绍         本课程采用的技术包括小程序开发.Node.js.Express和M ...

  7. node.js+Express计算机毕业设计基于Web的软考题库平台(程序+LW+部署)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

  8. [读书笔记]从物联到万联——Node.js与树莓派万维物联网构建实战

    前言 本文是"从物联到万联,Node.js与树莓派万维物联网构建实战"一书的读书笔记,该书翻译自"Building the Web of Things with exam ...

  9. 项目实战视频课程:美团小程序(Node.js+Express+支付)-李宁-专题视频课程

    项目实战视频课程:美团小程序(Node.js+Express+支付)-473人已学习 课程介绍         小程序视频教程,本课程实现了美团小程序的核心部分.采用异步的方式,通过AJAX从服务端获 ...

最新文章

  1. java jnotify_java JNotify (基于内核)实时监控文件
  2. c++(和opencv)如何把局部变量变成全局变量的功能
  3. 用 jQuery 获取 iframe 父子页面元素
  4. 数据挖掘10大算法详细介绍
  5. 人体反应测试仪 c语言,人体反应速度测试仪毕业设计说明
  6. 说实话:中文自然语言处理(知识图谱)的N个真实情况
  7. arXiv 注册流程介绍——详细图解
  8. classpath和classpath*区别
  9. 《HTML5+CSS3网页设计入门必读》——1.11 小结
  10. html如何动态添加样式表,JavaScript动态插入CSS的方法
  11. 机器视觉运动控制一体机应用|工件同心度检测
  12. centos7安装steam
  13. Intel开发手册下载地址
  14. mongodb数据库扩展名_MongoDB文件型数据库
  15. 二进制与十进制科学记数法举例
  16. 怎么删除电脑服务器远程桌面连接,删除远程桌面服务客户端访问许可证
  17. 自顶向下计算机网络 传输层
  18. Cadence Allegro导出BOM清单图文教程及视频演示
  19. word文档怎么调成黑底白字
  20. 两数相除,如果有余数则结果加一

热门文章

  1. python 中的下划线
  2. 看我是怎样让客户更快找到我的!
  3. 将当前的head推送到远程_git 入门教程之远程仓库
  4. 从做大牛那里整理的Python函数相关的学习笔记,希望对你有帮助
  5. java并行任务dispatch_Java模拟 双分派Double Dispatch
  6. python 打印列表对象,python – 打印对象列表
  7. .axf文件_干货!STM32晶振的更改,BIN文件的生成
  8. freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)
  9. python django web典型模块开发实战下载_Django实战 Python Web典型模块与项目开发
  10. stm32f103最小系统的组成及各部分功能