本文实例讲述了Node.js中sqlite3和MongoDB的用法。分享给大家供大家参考,具体如下:
setup.js:初始化数据库
sqlite3');
// var notesdb = require('./notesdb-mongoose');
notesdb.connect(function(error){
if (error) throw error;
});
notesdb.setup(function(error){
if (error){
util.log('ERROR ' + error);
throw error;
}
async.series([ //async.series函数可以控制函数按顺序执行,从而保证最后的函数在所有其他函数完成之后执行
function(cb){
notesdb.add("test","testtest",function(error){
if (error) util.log('ERROR ' + error);
cb(error);
});
}
],function(error,results){
if (error) util.log('ERROR ' + error);
notesdb.disconnect(function(err){});
}
);
});
nodesdb-sqlite3.js
它是一个无服务器且无需配置的sql数据库引擎,仅仅是作为一个独立的库被链接到应用程序上
npm install sqlite3 安装此模块之前先在系统上安装sqlite3库 http://www.sqlite.org/download.html 下载
数据库接口库
var util = require('util');
var sqlite3 = require('sqlite3');
sqlite3.verbose();
var db = undefined;
/*
数据库名是直接硬编码的,所以当调用connect和setup函数时,当前目录中就会生成chap06.sqlite3文件
*/
exports.connect = function(callback){
db = new sqlite3.Database("chap06.sqlite3",sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,function(err){
if (err){
util.log('FAIL on creating database ' + err);
callback(err);
} else {
callback(null);
}
});
}
//此处的disconnect函数是空的
exports.disconnect = function(callback){
callback(null);
}
exports.setup = function(callback){
db.run("CREATE TABLE IF NOT EXISTS notes " +
"(ts DATETIME,author VARCHAR(255),note TEXT)",function(err){
if (err){
util.log('FAIL on creating table ' + err);
callback(err);
} else {
callback(null);
}
});
}
exports.emptyNote = {"ts": "",author: "",note: ""};
exports.add = function(author,note,callback){
db.run("INSERT INTO notes (ts,author,note) " +
"VALUES (?,?,?);",[new Date(),note],function(error){
if (error){
util.log('FAIL on add ' + error);
callback(error);
} else {
callback(null);
}
});
}
/*
run函数接受一个字符串参数,其中?表示占位符,占位符的值必须通过一个数组传递进来
调用者提供了一个回调函数,然后通过这个回调函数来声明错误
*/
exports.delete = function(ts,callback){
db.run("DELETE FROM notes WHERE ts = ?;",[ts],function(err){
if (err){
util.log('FAIL to delete ' + err);
callback(err);
} else {
callback(null);
}
});
}
exports.edit = function(ts,callback){
db.run("UPDATE notes " +
"SET ts = ?,author = ?,note = ? " +
"WHERE ts = ?",[ts,ts],function(err){
if (err){
util.log('FAIL on updating table ' + err);
callback(err);
} else {
callback(null);
}
});
}
exports.allNotes = function(callback){
util.log(' in allnote');
db.all("SELECT * FROM notes",callback);
}
exports.forAll = function(doEach,done){
db.each("SELECT * FROM notes",function(err,row){
if (err){
util.log('FAIL to retrieve row ' + err);
done(err,null);
} else {
doEach(null,row);
}
},done);
}
/*
allNotes和forAll函数是操作所有数据的两种方法,allNotes把数据库中所有的数据行收集到一个数组里,
而forAll方法可以接受两个回调函数,每当从数据集中拿一行数据,回调函数doEach都会执行一遍,当读完所有数据时,回调函数done就会执行
*/
exports.findNoteById = function(ts,callback){
var didOne = false;
db.each("SELECT * FROM notes WHERE ts = ?",row){
if (err){
util.log('FAIL to retrieve row ' + err);
callback(err,null);
} else {
if (!didOne){
callback(null,row);
didOne = true; //保证回调函数只被执行一次
}
}
});
}
notesdb-mongoose.js
MongoDB是nosql数据库的领头羊之一,"可扩展、高性能、开源、面向文档的数据库",它使用JSON风格的文档。
Mongoose是用于访问MongoDB的模块之一,它是一个对象建模工具,意味着你的程序负责定义模式对象来描述数据,
而Mongoose负责数据到MongoDB的存储。
Mongoose对于Node和MongoDB而言是一个非常强大的对象建模工具,使用嵌入式文档,是一个类型灵活的系统,
适用于字段输入、字段验证、虚拟字段等。
安装Mongoose模块
Mongoose不是唯一一个在node中使用MongoDB的工具。
app.js
show.js
前台页面在views-sqlite3目录下
layout.html
viewnotes.html
addedit.html
login.html
node setup.js
node app.js
希望本文所述对大家nodejs程序设计有所帮助。