mongodb作一個簡單的註冊登陸效果

做爲一個初學者,作這個例子的時候我也是遇到了不少問題,在查看了一些大牛的解答,終於實現了這個簡單的效果,下面我來分享這個源代碼,以及其中我所遇到的問題html

這是在nodejs環境下做的一個實例,用到了jade,express,mongodb這幾個主要的模塊node

layout.jade文件web

doctype 5
html
  head
    title Mongodb example
  body
    h1 my first mongodb app
    hr
    block contentmongodb

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") signupexpress

login.jade文件cookie

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 backsession

signup.jade文件app

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 backpost

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,這個到相應的官網很容易下到的!

相關文章
相關標籤/搜索