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

来源:互联网 发布:雄迈cms客户端下载 编辑:程序博客网 时间:2024/05/17 09:15

这是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('/');  });};

完毕,启动运行即可。