Node.js以数据流的方式处理查询数据

原创 2015年11月20日 14:56:08

当从数据库中查询大量数据,并希望单独处理每一条查询到的数据时,可以使用mysql模块中的query对象(不可以再使用query方法中的callback回调函数)

query对象包含以下四个事件:

fields 当接收到该表中的所有字段时触发

result 当接收到该表中的一条数据时触发

end 当接收完该表中的所有数据时触发

error 当接收数据的过程中产生错误时触发

注意:在对读取到的记录执行一个耗时较长或消耗资源较多的I/O操作时,connection对象的pause方法和resume方法可以帮助减轻读取大数据量时的压力

var mysql = require('mysql');
var fs = require('fs');
var connection = mysql.createConnection({
	host : 'localhost',
	port : 3306,
	database : 'test',
	user : 'root',
	password : ''
})
var out = fs.createWriteStream('./message.txt');
out.on('error',function(err){
	console.log('写文件操作失败,错误信息为:' + err.message);
	process.exit();
})
connection.connect(function(err){
	if(err){
		console.log('与mysql数据库建立连接失败');
	}else{
		console.log('与mysql数据库建立连接成功');
		var query = connection.query('select * from admin');
		//当接收数据的过程中产生错误时触发
		query.on('error',function(err){
			console.log('读取数据失败,错误信息为:' + err.message);
			process.exit();
		})
		//fields当接收到该表中的所有字段时触发
		.on('fields',function(fields){
			var str = "";
			fields.forEach(function(field){
				if(str != ""){
					//String.fromCharCode()表示将Unicode字符值转换为相应的字符串,这里的9表示一个制表符
					str += String.fromCharCode(9);
				}
				str += field.name;
			})
			out.write(str + '\r\n');
		})
		//result当接收到该表中的一条数据时触发
		.on('result',function(row){
			//暂停读取后续数据
			connection.pause();
			out.write(row.id + String.fromCharCode(9) + row.username + String.fromCharCode(9) + row.password + '\r\n',function(err){
				//恢复读取后续数据
				connection.resume();
			})
		})
		//end当接收完该表中的所有数据时触发
		.on('end',function(){
			console.log('数据全部写入完毕');
			connection.end();
		})
	}
})

相关文章推荐

nodejs(数据查询功能7)--结束

![nodejs(数据查询功能7)–结束]模糊查询功能的添加(设定单个字对名字的匹配),当前页的查询 ajax前台传送匹配的字,当前的页数(for循环查找),计算出Number; 获取文本框的字;...

Nodejs数据流(Stream)手册

在书上看到的补充阅读,为了以后方便以后复习干脆翻译了下来。翻译自Node数据流手册1、介绍本文介绍了使用 node.js streams 开发程序的基本方法。"We should have some ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

RESTful 真正意味着什么?(转)

Restful风格的一些涵义!!!(看到好的博客就保存下来了)

nodejs mysql 数据查询例子

1、安装nodejs2、安装mysql npm包地址:https://github.com/felixge/node-mysqlnpm install mysql 3、相应API查看及调用:var...
  • z040145
  • z040145
  • 2015年12月31日 09:36
  • 1326

Hibernate查询数据的五种方式

1.导航对象图查询:根据已经加载的对象,导航到其他对象。 例如,对于已经加载的Customer对象,调用它getOrders().iterator()方法就可以导航到所有关联的Order对象,假...
  • xiaozaq
  • xiaozaq
  • 2016年09月20日 10:06
  • 1723

php在mysql中查询数据(4中方式)

一共四种方法,详细如下: 一、使用mysql_result()获取查询记录集    原型如下:    string mysql_result(int result,int row,mixe...

js生成html---查询数据后自动生成相对应的html展现内容

一些js的基本知识。

Hibernate查询数据的几种方式:

1.导航对象图查询:根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联...

Dynamics CRM2016 查询数据的三种方式的性能对比

之前写过一个博客,对非声明验证方式下连接组织服务的两种方式的性能进行了对比,但当时只是对比了实例化组织服务的时间,并没有对查询数据的时间进行对比,那有朋友也在我的博客中留言了反映了查询的时间问题,一直...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Node.js以数据流的方式处理查询数据
举报原因:
原因补充:

(最多只允许输入30个字)