当前位置:Gxlcms > 数据库问题 > mongodb做一个简单的注册登录效果

mongodb做一个简单的注册登录效果

时间:2021-07-01 10:21:17 帮助过:25人阅读

作为一个初学者,做这个例子的时候我也是遇到了很多问题,在查看了一些大牛的解答,终于实现了这个简单的效果,下面我来分享这个源代码,以及其中我所遇到的问题

这是在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,这个到相应的官网很容易下到的!

 

mongodb做一个简单的注册登录效果

标签:cookie   result   初学   登录   render   open   parse   form   orm   

人气教程排行