node.js基础:数据存储
无服务器的数据存储
内存存储
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擅长处理变化频繁,相对比较简单的数据。
node.js基础:数据存储的更多相关文章
- 进击Node.js基础(二)
一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...
- node.js基础模块http、网页分析工具cherrio实现爬虫
node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言 说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherri ...
- Node.js基础与实战
Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...
- Node.js基础知识
Node.js入门 Node.js Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- 10慕课网《进击Node.js基础(一)》初识promise
首先用最简单的方式实现一个动画效果 <!doctype> <html> <head> <title>Promise animation</titl ...
- 07慕课网《进击Node.js基础(一)》HTTP小爬虫
获取HTML页面 var http = require('http') var url='http://www.imooc.com/learn/348' http.get(url,function(r ...
- 03慕课网《进击Node.js基础(一)》API-URL网址解析
url url.parse(url,query,host);解析域名 url必须,地址字符串 query可选 host 可选:在不清楚协议时正确解析 querystring 字符串和对象之间互相解析 ...
- 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 ...
随机推荐
- Python处理海量手机号码
Python处理海量手机号码 一.任务描述 上周,老板给我一个小任务:批量生成手机号码并去重.给了我一个Excel表,里面是中国移动各个地区的可用手机号码前7位(如下图),里面有十三张表,每个表里的电 ...
- linux下动态连接变为静态打包,使用statifier_S展翅飞_新浪博客
linux下动态连接变为静态打包,使用statifier_S展翅飞_新浪博客 linux下动态连接变为静态打包,使用statifier (2013-04-27 14:38:19) 转载▼
- 启动和关闭JBoss As 7.1.1脚本
启动和关闭JBoss As 7.1.1,脚本例如以下djboss.sh: #!/bin/sh #JBOSS_HOME JBOSS_HOME=/opt/jboss case "$1" ...
- 【ASP.NET】验证控件
在软件开发中,验证输入信息是否正确,这是不可缺少的一项工作.就拿我们做过的机房收费系统来说,在登录的时候,我们须要对username和用户password进行验证.推断是否为空,推断输入字符是否合理等 ...
- 传京东副总裁蒉莺春或将接管POP业务-搜狐IT
传京东副总裁蒉莺春或将接管POP业务-搜狐IT 传京东副总裁蒉莺春或将接管POP业务
- ServiceCallSite
ServiceCallSite 通过上一篇的介绍我们应该对实现在ServiceProvider的总体设计有了一个大致的了解,但是我们刻意回避一个重要的话题,即服务实例最终究竟是采用何种方式提供出来的. ...
- POJ 3632 Optimal Parking(简单题)
[题意简述]:就是选择一个停车地点.然后走遍全部的store后,再回到停车地点.就是走一圈.问要走的距离是多少. [分析]:能够直接求出距离的最大值与最小值,求出差值.乘以2就是最后的输出结果. // ...
- Knockout应用开发指南 第十章:更多信息(完结篇)
原文:Knockout应用开发指南 第十章:更多信息(完结篇) 1 浏览器支持 Knockout在如下浏览器通过测试: Mozilla Firefox 2.0+(最新测试版本:3.6.8) Goo ...
- SWT的CheckBoxTreeView
其实CheckBoxTreeView和TreeView基本上是一样的,他们共同的方法有: TreeViewer 类封装了tree控件.树查看器按照父子关系来显示分等级的对象列表.此查看器需要设置标签供 ...
- java IO流文件的读写具体实例
IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader 低端流:所有的外界设备中的流都是低端流,比如InputStream,Output ...