NodeJs+Mongodb用法

     學習《Node.js入門指南》中的微博案例,折騰了好久,總算可以運行了,在這裏將Node.JS的Mongodb中用法抽離出來,以備後用。

    1、首先將Mongodb框架安裝到項目中。使用的版本爲:

        "mongodb": "*",
        "connect-mongo":"*",
    2、定義一個setting.js文件用於保存Mongodb的一些配置信息

module.exports={
    cookieSecret: 'microblogxiao',//用於加密可以隨便定義
    db: 'myblog',                 //數據庫名
    host: 'localhost'             //本地服務器
}
    3、定義一個models/db.js功能是專門用於連接Mongodb

var settings = require('../setting');   //將setting.js加載進來
var Db = require('mongodb').Db;         //用於操作數據庫
var Connection = require('mongodb').Connection;   //連接數據庫
var Server = require('mongodb').Server;           //啓動一個數據庫服務

//建立一個連接數據庫對象,通過module.exports將該對象設置爲外部可引用。
module.exports = new Db(settings.db,new Server(settings.host,Connection.DEFAULT_PORT,{}),{safe:true});
    4、定義操作方法user.js

/**
 * Created by kevin on 2015/1/15.
 */

var mongodb = require('./db'); //加載數據庫連接操作對象的類
var util = require('util');
function User(user) {          //初始化對象,傳入2個參數
    this.name = user.name;
    this.password = user.password;
};

User.prototype.save = function save(callback) {    //定義一個原型方法,User繼承該方法。用於保存數據
    var user = {
        name: this.name,
        password: this.password
    };

    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('users', function (err, collection) {
            if (err) {
                mongodb.close();
                return callback(err);
            }

            // collection.ensureIndex('name', {unique: true});


            console.log("user=="+util.inspect(user));
            collection.insert(user,{safe: true}, function (err, user) {
                mongodb.close();
                callback(err, user);
            });
        });
    });
}

//查詢用戶
User.get = function get(username, callback) {
    console.log("username=" + username);
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }

        db.collection('users', function (err, collection) {
            if (err) {
                mongodb.close();
                return callback(err);
            }

            collection.findOne({name: username}, function (err, doc) {
                mongodb.close();
                console.log("doc="+util.inspect(doc));
                if (doc) {
                    var user = new User(doc);

                    console.log("user=="+util.inspect(user));
                    callback(err, user);
                } else {
                    callback(err, null);
                }
            });
        });
    });
};

module.exports = User;
    5、使用數據操作方法在入口程序中或路由中。(將註冊信息存入數據庫中)

router.post('/reg', checkNotLogin);
router.post('/reg', function (req, res) {
    if (req.body['password-repeat'] != req.body['password']) {
        req.flash('error', "兩次輸入的口令不一致");
        return res.redirect('/reg');
    }
    console.log(req.body.username);

    var md5 = crypto.createHash('md5');
    var password = md5.update(req.body.password).digest('base64');


    var user = {
        name: req.body.username,
        password: password
    }

    var newUser = new User(user);        //獲得User對象,並將註冊信息傳入

    //檢查用戶名是否已經存在
    User.get(newUser.name, function (err, user) {
        console.log("xx=" + newUser.name);
        if (user)
            err = 'Username already exists.';
        if (err) {
            req.flash('error', err);
            return res.redirect('/reg');
        }

        newUser.save(function (err) {
            if (err) {
                req.flash('error', err);
                return res.redirect('/reg');
            }
            req.session.user = newUser;
            req.flash('success', '註冊成功');
            res.redirect('/');
        });
    });


});



發佈了22 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章