无服务器的数据存储
内存存储
var http = require('http'); var count = 0; //服务器访问次数存储在内存中 http.createServer(function(req,res){ res.write('hello'+ ++count); res.end(); }).listen(3000);
基于文件的存储
node.js中主要用fs文件系统模块来管理文件的存储。
文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。您可以通过调用require('fs')
来获取该模块。文件系统模块中的所有方法均有异步和同步版本。
在繁重的任务中,强烈推荐使用这些函数的异步版本.同步版本会阻塞进程,直到完成处理,也就是说会暂停所有的连接。
var fs = require('fs'); //读取一个文件的全部内容 fs.readFile('./node.txt',function(err,data){ if(err) throw err; console.log(data); //data就是文件的内容 }); //将数据写入一个文件, 如果文件原先存在,会被替换。 data 可以是一个string,也可以是一个原生buffer。 fs.writeFile('./node.txt','hello','utf8',function(err) { if(err) throw err; console.log('Saved'); });
数据库管理系统(DBMS)
关系型数据库:MySQL和PostgreSQL
NoSQL数据库:Redis、MongoDB和Mongoose
MySQL
使用第三方mysql模块让node.js跟MySQL交互
npm install mysql
设置数据库
//引入mysql模块 var mysql = require('mysql'); //设置数据库 var db = mysql.createConnection({ host: '127.0.0.1', user: 'root', password: '123456', database: 'shop' //数据库名称 }); db.connect(); //查询数据 db.query('select * from tb_user',function(err,rows,fields){ if(err) throw err; console.log( rows[0].tel ); //rows为查询到的数据集数组 }); db.end();
MongoDB
安装
npm install mongodb
连接MongoDB
var mongodb = require('mongodb'); var server = new mongodb.Server('127.0.0.1', 27017, {}); var client = new mongodb.Db('mydatabase', server, {w: 1});
访问MongoDB集合
client.open(function(err){ if(err) throw err; client.collection('test_insert', function(err, collection){ if(err) throw err; //.. }); });
将文档插入集合中
collection.insert({ "title": "I like cake", "body": "It is quite good." },{safe: true }, function(err, documents) { if(err) throw err; console.log('Document ID is: ' + documents[0]._id); });
用文档ID更新数据
var _id = new client.bson_serializer .ObjectID('4e650d344ac74b5a01000001'); collection.update({_id: _id},{$set:{"title": "I ate too much cake"}},{safe: true},function(err){ if (err) throw err; });
搜索文档
collection.find({"title": "I ate too much cake"}).toArray(function(err,results){ if(err) throw err; console.log(results); });
删除文档
var _id = new client.bson_serializer.ObjectID('4e650d344ac74b5a01000001'); collection.remove({_id: _id},{safe:true},function(err){ if(err) throw err; });
Mongoose
Mongoose是一个抽象的MongoDB数据库访问API,在底层处理细节,可以加快开发速度,同时维护更少的代码。
npm install mongoose
连接的打开和关闭
//连接 var mongoose = require('mongoose'); var db = mongoose.connect('mongodb://localhost/tasks'); //tasks为数据库 //打开 mongoose.disconnect();
注册schema
var Schema = mongoose.Schema; var Tasks = new Schema({ project: String, description: String }); mongoose.model('Task', Tasks);
添加任务
var Task = mongoose.model('Task'); var task = new Task(); task.project = 'Bikeshed'; task.description = 'Paint the bikeshed red.'; task.save(function(err) { if (err) throw err; console.log('Task saved.'); });
搜索文档
var Task = mongoose.model('Task'); Task.find({'project': 'Bikeshed'}, function(err, tasks) { for (var i = 0; i < tasks.length; i++) { console.log('ID:' + tasks[i]._id); console.log(tasks[i].description); } });
更新文档
var Task = mongoose.model('Task'); Task.update({_id: '4e650d344ac74b5a01000001'},{description:'Paint the bikeshed green.'},{multi:false},function(err,rows_updated){ if (err) throw err; console.log('Updated.'); });
删除文档
var Task = mongoose.model('Task'); Task.findById('4e650d344ac74b5a01000001',function(err,task){ task.remove(); });
如果喜欢基于SQL的处理方式,关系型数据库管理系统MySQL和PostgreSQL都得到了很好的支持。
如果发现SQL在性能或灵活性上表现欠佳,Redis和MongoDB都是不错的可选项。MongoDB是极佳的通用DBMS,而Redis擅长处理变化频繁,相对比较简单的数据。