日期:2014-05-16  浏览次数:20480 次

nodejs--express开发个人博客(2)

      上一部分已经实现了视图的雏形,现在加上逻辑操作。

       登陆、注册、文章发表都需要用到数据库的数据存取,用的比较多的就是mongodb了。

       MongoDB 是一个对象数据库,它没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储。所谓文档就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。下面是一个 MongoDB 文档的示例: 
{ "_id" : ObjectId( "4f7fe8432b4a1077a7c551e8" ), 
  "uid" : 2004, 
  "username" : "byvoid", 
  "net9" : { "nickname" : "BYVoid", 
    "surname" : "Kuo", 
    "givenname" : "Carbo", 
    "fullname" : "Carbo Kuo", 
    "emails" : [ "byvoid@byvoid.com", "byvoid.kcp@gmail.com" ], 
    "website" : "http://www.byvoid.com", 
    "address" : "Zijing 2#, Tsinghua University" } 

看着眼熟吧?恩,和json的格式一样。

      使用方法:

       去官网下载mongodb,解压到D:\softdata\nodejs\mongodb,在mongodb文件夹下新建文件夹取名myblog用来存放我们的数据。然后新打开一个cmd窗口,cd到我 们的D:\softdata\nodejs\mongodb\bin目录下,输入mongod -dbpath "D:\softdata\nodejs\mongodb\blog"设置数据库路径并启动数据库,最小化窗口不要关闭(以后启动也这么启动,另外可以进到bin目录下通过start mongo命令来启动mongodb的控制台,方便查看自己的数据库中的内容,一些常见的命令有:db.users.find()、db.users.count()、db.users.remove()等,具体是干什么的,自己试过就知道了)。

     接下来我们在node中连接mongodb,打开 package.json,在 dependencies 属性中添加一行代码:"mongodb":"*",然后npm install安装mongodb模块,接下来在blog文件夹下创建 settings.js 文件,用于保存数据库的连接信息:

module.exports = { 
  cookieSecret: 'myblog', 
  db: 'blog', 
  host: 'localhost'}; 

      好了,数据库准备好了,下面就来写数据库存放的数据模型了。

      在blog下面新建一个文件夹models用于存放数据模型。

     在models下面新建db.js用于配置数据库:

var settings = require('../settings'),
    Db = require('mongodb').Db,
    Connection = require('mongodb').Connection,
    Server = require('mongodb').Server;
module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}));

       接下来安装connect-mongo模块用来存储会话信息到数据库,关于connect-mongo的说明在nodejs开发指南里面做了详细解释,不多说。在 package.json 的dependencies中添加一行代码:"connect-mongo":"*",npm install安装connect-mongo模块。

然后在app.js里面引入数据库的相关配置文件就行了,先在“var path = require('path');”后添加以下内容:

var  MongoStore = require('connect-mongo')(express);//注意:后面有(express)
var settings = require('./settings');

在“app.use(express.methodOverride());”后添加:

app.use(express.cookieParser());
app.use(express.session({ 
      secret: settings.cookieSecret, 
      store: new MongoStore({ 
      db: settings.db 
   }) 
}));
至此数据库的配置已经做好了,下面可以用了。

登录和注册都需要比对数据库中的用户信息。在models下新建一个user.js,里面封装了对用户的操作:

var mongodb = require('./db');

function User(user){
    this.name = user.name;
    this.password = user.password;};module.exports = User;

User.prototype.save = function save(callback) {
    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
        });

        collection.insert(user,{safe: true}, function(err, user){
            mongodb.close();
            callback(err, user);
        });
    });});};

User.get = function get(username