express学习笔记(四)-- 连接mongoDB进行注册登录功能

##连接数据库参数设置db.js
设置数据库参数

var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;

//module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {safe:false}));
module.exports = new Db('nodetest1', new Server('localhost', Connection.DEFAULT_PORT, {safe:false}));

##增加数据库操作user.js
在model中新建user.js
在这个程序中md5操作没有使用,因为好像会出问题

var mongodb = require('./db')
// 加密 md5
var crypto = require('crypto');

//初始化创建
function User(user) {
  this.username = user.username;
  this.password = user.password;
  // this.password = crypto.createHash('md5').update(user.password).digest('hex');

};

module.exports = User;

//存入数据库操作
User.prototype.save = function save(callback) {
  // 存入 Mongodb 的文檔
  var user = {
    username: this.username,
    password: this.password,
  };
  mongodb.open(function(err, db) {
    if (err) {
      return callback(err);
    }
    // 讀取 users 集合
    db.collection('users', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      // 爲 name 屬性添加索引
      // collection.ensureIndex('username', {unique: true});
      // 寫入 user 文檔
      collection.save({"username": user.username, "password" : user.password}, function(err, user) {
        mongodb.close();
        callback(err, user);
      });
    });
  });
};

//根据username获取user,其中callback为user
User.get = function get(username, callback) {
  mongodb.open(function(err, db) {
    if (err) {
      return callback(err);
    }
    // 讀取 users 集合
    db.collection('users', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      // 查找 name 屬性爲 username 的文檔
      collection.findOne({username: username}, function(err, doc) {
        mongodb.close();
        if (doc) {
          // 封裝文檔爲 User 對象
          var user = new User(doc);
          callback(err, user);
        } else {
          callback(err, null);
        }
      });
    });
  });
};

##修改routes/index.js

var express = require('express');
var User = require('../model/user.js');
var router = express.Router();
// 加密
// var crypto = require('crypto');

/* GET home page. */
router.get('/', function(req, res) {
    if (req.session.user) {
        res.render('index', { title: 'Home', user: req.session.user})
    } else {
        res.redirect('/login');
    }
});

router.get('/register',function(req,res) {
    res.render('register', { title: 'register' });
});

router.post('/register',function(req,res) {
    var newUser = new User({
        username: req.body.username,
        password: req.body.password,
    });    
    newUser.save(function(err) {
        console.log("save");
        req.session.user = newUser;
        res.redirect('/');
    });
});

router.get('/login',function(req,res) {
    res.render('login', { title: 'login' });
});

router.post('/login',function(req,res) {
    User.get(req.body.username, function(err, user) {
        var password = req.body.password;
        if (!user) {
            //req.flash('error', '用戶不存在');
            console.log("用户不存在");
            return res.redirect('/register');
        }
        if (user.password != password) {
            //req.flash('error', '用戶口令錯誤');
            console.log("用户密码错误"+ user.password + "but nide:"+ password);
            return res.redirect('/login');
        }
        req.session.user = user;
        console.log(req.session);
        console.log("登陆成功");
        res.redirect('/');
    }); 
});

router.get('/logout',function(req,res) {
    req.session.user = null;
    // req.flash('success', '登出成功');
    res.render('logout', { title: 'login' });
});

module.exports = router;

##创建rejister.ejs

完成上述步骤,应该就可以正常的进行mongoDB,以及session的判断,当然mongodb的module这个都是要提前装好的

npm install mongodb

好了,写完收工