迁移Simple-TODO Nodejs实现版至CouchDB数据库

这是suqian大牛的Simple-TODO Nodejs 实现版 :http://cnodejs.org/topic/4f16442ccae1f4aa270010d5

最近他把数据库改用MongoDB了,部署的方法可以参考这里:http://blog.csdn.net/kunshan_shenbin/article/details/7725415

由于近阶段一直在研究CouchDB,所以也弄了个couchdb的实现,代码完全基于上面提到的Simple-TODO Nodejs实现。

步骤如下:

1. 下载Simple-TODO Nodejs实现版至本地。

git clone https://github.com/fengmk2/todo.git

2. 安装couchdb的驱动插件cradle

进入todo目录后运行 npm install cradle

3. 只需对代码稍作修改即可。

config.js中追加如下3个设置项:

exports.db_port = 5984;
exports.db_url = 'http://localhost';
exports.db_name = 'todo_dev';

common/db.js修改如下:

"use strict";

/**
 * Module dependencies.
 */

var cradle = require('cradle');
var config = require('../config');

var connection = new(cradle.Connection)(config.db_port, config.db_port, {
	cache: true,
	raw: false
});
var db = connection.database(config.db_name);
db.exists(function (err, exists) {
	if (err) {
		console.log('error', err);
	} else if (exists) {
		console.log('database exists, please enjoy.');
	} else {
		console.log('database does not exist, create a new one.');
		db.create(function() {
			db.save('_design/todo', {
				views: {
					all: {
						map: 'function (doc) { emit(doc._id, doc) }'
					}
			    }
			});
		});
	}
});
module.exports = db;

controllers/todo.js在操作数据库部分需要改成通过cradle对couchdb的操作。

"use strict";

/**
 * Module dependencies.
 */

var config = require('../config');
var db = require('../common/db');

exports.index = function (req, res, next) {
	db.view('todo/all', function (err, result) {
		if (err) {
			return next(err);
		}
		var data = new Array();
		result.forEach(function (row) {	
			data.push(row);
		});
		res.render('index.html', {todos: data});
	});
};

exports.new = function (req, res, next) {
  var title = req.body.title || '';
  title = title.trim();
  if (!title) {
    return res.render('error.html', {message: '标题是必须的'});
  }
  db.save({title: title, post_date: new Date()}, function (err, result) {
	  if (err) {
		  return next(err);
	  }
	  res.redirect('/');
  });
};

exports.view = function (req, res, next) {
  res.redirect('/');
};

exports.edit = function (req, res, next) {
  var id = req.params.id;
  db.get(id, function (err, doc) {
	  if (err) {
	      return next(err);
	  }
	  if (!doc) {
	      return next();
	  }
	  res.render('todo/edit.html', {todo: doc});
  });
};

exports.save = function (req, res, next) {
  var id = req.params.id;
  var title = req.body.title || '';
  title = title.trim();
  if (!title) {
    return res.render('error.html', {message: '标题是必须的'});
  }
  db.merge(id, {title: title}, function (err, result) {
	  if (err) {
	      return next(err);
	  }
	  res.redirect('/');
  });
};

exports.delete = function (req, res, next) {
  var id = req.params.id;
  db.get(id, function (err, doc) {
	  var rev = doc._rev;
	  db.remove(id, rev, function (err, result) {
		  if (err) {
			  return next(err);
	      }
	      res.redirect('/');
	  });
  });
};

exports.finish = function (req, res, next) {
  var finished = req.query.status === 'yes' ? 1 : 0;
  var id = req.params.id;
  db.merge(id, {finished: finished}, function (err, result) {
	  if (err) {
	      return next(err);
	  }
	  res.redirect('/');
  });
};

完毕,启动运行即可。


你可能感兴趣的:(NodeJS,No-SQL)