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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章