mongodb做一个简单的注册登录效果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb做一个简单的注册登录效果相关的知识,希望对你有一定的参考价值。
作为一个初学者,做这个例子的时候我也是遇到了很多问题,在查看了一些大牛的解答,终于实现了这个简单的效果,下面我来分享这个源代码,以及其中我所遇到的问题
这是在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做一个简单的注册登录效果的主要内容,如果未能解决你的问题,请参考以下文章