日期:2014-05-16 浏览次数:20480 次
上一部分已经实现了视图的雏形,现在加上逻辑操作。
登陆、注册、文章发表都需要用到数据库的数据存取,用的比较多的就是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, {}));
然后在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