设为首页 收藏本站
查看: 794|回复: 0

[经验分享] mongodb做一个简单的注册登录效果

[复制链接]

尚未签到

发表于 2017-12-16 07:35:55 | 显示全部楼层 |阅读模式
  作为一个初学者,做这个例子的时候我也是遇到了很多问题,在查看了一些大牛的解答,终于实现了这个简单的效果,下面我来分享这个源代码,以及其中我所遇到的问题
  这是在nodejs环境下作的一个实例,用到了jade,express,mongodb这几个主要的模块
  layout.jade文件
  doctype 5
  html
  head
  title Mongodb example
  body
  h1 my first mongodb app
  hr
  block content
  index.jade文件
  extends ../layout
  block content
  if (authenticated)
  p welcome back, #{me.first}
  a(href="/logout") logout
  else
  p welcome new visitor
  ul
  li
  a(href="/login") login
  li
  a(href="/signup") signup
  login.jade文件
  extends ../layout
  block content
  form(action="/login",method="POST")
  fieldset
  legend Log in
  if(signupEmail)
  p congratulations on signup!pleasel login below
  p
  label email
  input(name="user[email]",type="text",value=signupEmail)
  p
  label password
  input(name="user[password]",type="password")
  p
  button submit
  p
  a(href="/")go back
  signup.jade文件
  extends ../layout
  block content
  form(action="/signup",method="POST")
  fieldset
  legend Sign up
  p
  label first
  input(name="user[first]",type="text")
  p
  label last
  input(name="user[last]",type="text")
  p
  label email
  input(name="user[email]",type="text")
  p
  label password
  input(name="user[password]",type="password")
  p
  button submit
  p
  a(href="/") go back
  server.js文件
  var express = require('express');
  var app = express.createServer();
  var ObjectId = require('mongodb').ObjectID;
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({secret:'my secret'}));
  app.use(function(req,res,next){//这个中间件一定要放在前面,放到定义的路由后面就没起作用了,这是身份验证中间件,特别注意匹配数据库_id时要先把得到的id字符串转换为ObjectId对象ObjectId(req.session.loggedIn)
  if(req.session.loggedIn)
  {
  //console.log(1);
  res.local('authenticated',true);
  app.users.findOne({_id:ObjectId(req.session.loggedIn)},function(err,doc){
  if(err) return next(err);
  // console.log(doc);
  res.local('me',doc);
  next();
  })
  }else
  {
  res.local('authenticated',false);
  res.local('signupEmail',false);  
  next();
  }
  })
  app.set('views','./views/pages');
  app.set('view engine','jade');
  app.set('view options',{layout:false});
  app.get('/',function(req,res){//定义首页路由
  res.render('index'/*,{authenticated:false}*/);
  })
  app.get('/login',function(req,res){//定义登录页面路由
  res.render('login');
  })
  app.get('/login/:id',function(req,res){//登录路由,应用于刚注册后
  res.render('login',{signupEmail:req.params.id});
  })
  app.post('/login',function(req,res){//处理登录路由
  app.users.findOne({email:req.body.user.email,password:req.body.user.password},function(err,doc){
  if(err) return next(err);
  if(!doc) return res.end('user not find ,go back and try again');
  //console.log(doc);
  req.session.loggedIn = doc._id.toString();
  //console.log(req.session.loggedIn);
  res.redirect('/');
  })
  })
  app.get('/logout',function(req,res){//登出出来
  req.session.loggedIn = null;
  res.redirect('/');
  })
  app.get('/signup',function(req,res,next){//注册路由
  res.render('signup')
  })
  app.post('/signup',function(req,res,next){//处理注册路由
  app.users.insert(req.body.user,function(err,doc){
  //console.log(req.body.user)
  //console.log(doc);
  /*doc的内容{ result: { ok: 1, n: 1 },
  ops:
[ { first: '66',

  last: '77',
  email: '88',
  password: '99',
  _id: 58d1248a72b183070d1cf678 } ],
  insertedCount: 1,
  insertedIds: [ 58d1248a72b183070d1cf678 ] }
  */
  if(err) return next(err);
  res.redirect('/login/'+doc.ops[0].email);
  })
  })
  var mongodb = require('mongodb').Db;
  var server = require('mongodb').Server;
  var db = new mongodb('my-website',new server('127.0.0.1',27017));//连接数据库
  db.open(function(err,client){
  if(err) throw err;
  console.log('connected to mongodb');
  app.users = db.collection('users');//创建一个集合名为users
  client.ensureIndex('users','email',function(err){
  if(err) throw err;
  client.ensureIndex('users','password',function(err){
  if(err) throw err;
  console.log('ensured index');
  app.listen(3000,function(){
  console.log('app listening on 3000');
  })
  })
  })
  })
  //app.listen(3000);
  自己需要安装mongodb和nodejs,这个到相应的官网很容易下到的!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424592-1-1.html 上篇帖子: MongoDB学习笔记三 下篇帖子: mongodb中获取图片文件<标记>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表