本文实例讲述了Node.js中sqlite3和MongoDB的用法。分享给大家供大家参考,具体如下:
setup.js:初始化数据库
rush:js;">
var util = require('util');
var async = require('async'); //npm install async
var notesdb = require('./nodesdb-
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
sqlite3 是一个轻量级的进程内sql引擎
它是一个无服务器且无需配置的sql数据库引擎,仅仅是作为一个独立的库被链接到应用程序上
npm install sqlite3 安装此模块之前先在系统上安装sqlite3库 http://www.sqlite.org/download.html 下载
rush:js;">
//
数据库接口库
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而言是一个非常强大的对象建模工具,使用嵌入式文档,是一个类型灵活的系统,
适用于字段输入、字段验证、虚拟字段等。
MongoDB在Windows下安装部署 :
安装Mongoose模块
Mongoose不是唯一一个在node中使用MongoDB的工具。
app.js
show.js
前台页面在views-sqlite3目录下
layout.html
viewnotes.html
rush:xhtml;">
<% include layout.html %>
<%=new Date(note.ts).toString()%>: by <%=note.author%>
<%=note.note%>
addedit.html
rush:xhtml;">
<% include layout.html %>
login.html
rush:xhtml;">
<% include layout.html %>
node setup.js
node app.js
希望本文所述对大家nodejs程序设计有所帮助。
原文地址:https://www.jb51.cc/nodejs/39976.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。