无服务器的数据存储

    内存存储

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)

    关系型数据库:MySQLPostgreSQL

    NoSQL数据库:RedisMongoDBMongoose

  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擅长处理变化频繁,相对比较简单的数据。

node.js基础:数据存储的更多相关文章

  1. 进击Node.js基础(二)

    一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...

  2. node.js基础模块http、网页分析工具cherrio实现爬虫

    node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherri ...

  3. Node.js基础与实战

    Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...

  4. Node.js基础知识

    Node.js入门   Node.js     Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...

  5. NodeJs>------->>第三章:Node.js基础知识

    第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 console.log(" node app1.js 1> ...

  6. 10慕课网《进击Node.js基础(一)》初识promise

    首先用最简单的方式实现一个动画效果 <!doctype> <html> <head> <title>Promise animation</titl ...

  7. 07慕课网《进击Node.js基础(一)》HTTP小爬虫

    获取HTML页面 var http = require('http') var url='http://www.imooc.com/learn/348' http.get(url,function(r ...

  8. 03慕课网《进击Node.js基础(一)》API-URL网址解析

    url url.parse(url,query,host);解析域名 url必须,地址字符串 query可选 host 可选:在不清楚协议时正确解析 querystring 字符串和对象之间互相解析 ...

  9. 01慕课网《进击Node.js基础(一)》Node.js安装,创建例子

    版本:偶数位为稳定版本,基数为非稳定版本 - 0.6.x - 0.7.x    - 0.8.x -0.9.x    -0.10.x  -0.11.x 概念:Node.js采用谷歌浏览器的V8引擎,用C ...

随机推荐

  1. Java---25---集合框架共性方法

    集合类 为什么会出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便对较多个对象的操作,就对对象进行存储,集合就是存储对象最经常使用的一种方式 数组和集合类同一时候容器,有何不同? 数组 ...

  2. poj-3791-An Easy Game-记忆化搜索

    dp[i][j]:还有i个不同样的位置,还能走j步,一共同拥有多少种走法. 非常明显 dp[i][j]=sigm(dp[i-k][j-1]*c[i][k]*c[n-i][m-k]); 用记忆化搜索记忆 ...

  3. HDU 4022 Bombing (map + multiset)

    题意: 在x,y坐标范围为10 ^ -9 ~~ 10 ^ 9的坐标轴之中,有 10W个点(注意有些点可能在同一坐标上),然后有10W个询问,处理询问按照输入顺序处理,对于每个询问a,b    a == ...

  4. set echo on/off,set term on/off,set feedback off,set heading off命令(转)

    1.term命令:  当和SPOOL命令联合使用时,可以取消SQLPLUS输出,查询结果仅仅存在于假脱机文件中  set term on:查询结果既显示于假脱机文件中,又在SQLPLUS中显示:  s ...

  5. Android中怎样在应用A中启动或安装应用B

    看到别人做的游戏攻略,想着自己的游戏攻略也加入新的功能,即Android中怎样在应用A中启动或安装应用B.就查了一些资料整理下来. 启动或安装对应的应用的方法: Step1:推断是否安装目标应用.仅仅 ...

  6. 深入java并发Lock一

    java有像syncronized这种内置锁,但为什么还须要lock这种外置锁? 性能并非选择syncronized或者lock的原因,jdk6中syncronized的性能已经与lock相差不大. ...

  7. [置顶] JQuery实战总结三 标签页效果图实现

    在浏览网站时我们会看到当我们鼠标移到多个选项卡上时,不同的选项卡会出现自己对应的界面的要求,在同一个界面上表达了尽量多的信息.大大额提高了空间的利用率.界面的切换效果也是不错的哦,这次自己可以实现啦. ...

  8. mahout源码KMeansDriver分析之五CIMapper

    接上文重点分析map操作: Vector probabilities = classifier.classify(value.get());// 第一行 Vector selections = pol ...

  9. cocos2d-x 旅程開始--(实现瓦片地图中的碰撞检測)

    转眼隔了一天了,昨天搞了整整一下午加一晚上,楞是没搞定小坦克跟砖头的碰撞检測,带着个问题睡觉甚是难受啊!还好今天弄成功了.只是感觉程序不怎么稳定啊.并且发现自己写的东西让我重写一遍的话我肯定写不出来. ...

  10. Determining IP information for eth1... failed; no link present. Check cable? 解决办法

    有时候会遇到这种问题 解决办法为 进入网卡配置,将 BOOTPROTO 改为 none 然后 ifconfig –a 查看可以得到 eth1 已经可以寻到 iP 地址,如下: Service netw ...