node js全程实例学习

node.js 控制台输出

console.log('Node js - console.log() 方法')
console.info('Node js - console.info() 方法')

/**
 * 输出json
 */
console.log("%j", {OS:"windows", Version:"8.1", Language:["English", "Chinese"]});

/**
 * 输出运算符结果
 */
var a = 0;
var b = 1;
console.log(a==b);
console.log(a>=b);
console.log(a<=b);
console.log(a==0 && b==1);

/**
 * 格式化参数输出
 */
console.log("%s", "argument");
console.log("%d", 8);

/**
 * 输出错误和警告
 * import module - fs
 */
var fs = require('fs');
var file = 'error-warn.txt';
var encoding = 'UTF-8';
// TODO: read file
fs.readFile(file, encoding, function(err, data) {
	if (err) {
		console.error("error - \n %s", err);
		console.warn("warn - \n %s", err);
	} else {
		console.log(data);
	}
})

/**
 * 输出位置重定向
 */
命令 node ch02-node-console-redirect.js 2> error.log

/**
 * console.dir(123)
 * 输出对象的属性和方法
 */

/**
 * 输出控制键
 * readline模块
 */
console.info('Node.js - readline.write() Usage');
var readline = require('readline');	// 引入readline模块
var rl = readline.createInterface({	// 初始化rl对象
	input: process.stdin,
	output: process.stdout
});
rl.write('Delete me! Wait for 3 seconds...');
var timeoutLength = 3 * 1000;
var timeout = setTimeout(function() {
	// 模仿Ctrl+U快捷键, 删除之前所写行
	rl.write(null, {ctrl:true, name:'u'});
}, timeoutLength);

/**
 * 从控制台读取用户输入
 */
var readline = require('readline');
rl = readline.createInterface(
	process.stdin,
	process.stdout	
);
rl.setPromt('NodeJS> ');
rl.prompt();
rl.on('line', function(line) {
	switch(line.trim()) {
		case 'name':
			console.log('king!');
			break;
		default:
			console.log('Say what? I might have heard `' + line.trim() + '`');
	}
	rl.promt();
}).on('close', function() {
	console.log('Have a great day!');
	process.exit(0);
})

/**
 * 断言工具
 * console.assert(a == b, "Error : 1 == 2");
 */

/**
 * 控制台输出表格
 * console.table(arrTable);
 * console.table(arrTable, ["name"]);
 */

文件管理

  1. 打开与关闭文件
    文件系统fs模块中提供了fs.open()与fs.openSync()两个方法来完成打开文件的操作,相应地提供了fs.close()与fs.closeSync()两个方法来完成关闭文件的操作。
  2. 获取文件信息
    获取文件信息的方法有4个,分别是fs.stat()、fs.statSync()、fs.fstat()、fs.fstatSync()。其中,fs.stat()与fs.statSync()两个方法可以直接使用文件路径进行操作,而fs.fstat()与fs.fstatSync()两个方法需要使用文件描述符进行操作。
    3.重命名文件
    fs.rename()与fs.renameSync
    4.相对路径转绝对路径
    fs.realpath()和fs.realpathSync
    5.目录操作
    fs.mkdir(), fs.rmdir(),fs.mkdirSync(),fs.rmdirSync(),fs.readdir(),fs.readdirSync()
    6.读取文件内容
    fs.readFile(),fs.readFileSync(),fs.exists(),fs.existsSync(),fs.writeFile(),fs.writeFileSync(),fs.appendFile(),fs.appendFileSync()
    7.监控文件
    对指定的文件或路径添加监听事件,当文件或路径发生改变时,触发该事件。
    fs.watch()和fs.watchFile()

缓冲区管理

/** 创建Buffer */
var buffer = new Buffer('nodejs', 'utf8');
/** 判断缓冲区对象 */
Buffer.isBuffer()
/** 判断是否有效的编码 */
Buffer.isEncoding()
/** 显示字节长度 
 * Buffer.byteLength()写HTTP响应头时经常要用到
 * Conten-Length
 */
Buffer.byteLength(string, [encoding]);
/** api */
buf.toString([encoding], start, end)
buf.slice(start, end)
buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
buf.concat(list, [len])
buf.buffer_parse(), str.string_parse()

网络管理

tcp

/** 创建TCP服务器 */
net.createServer([options:{allowHalfOpen:false}], [connectionListener]).listen(PORT, HOST)
/** 另一种创建TCP服务器(connection事件) */ ['listening', 'close']
server.on('connection', function(sock){})
/** 获取服务器地址参数 */
server.address()
server.getConnections()

/** 创建TCP客户端 */clinet: {socket}
net.connect(PORT, HOST, fn):client
/** 客户端方式 */
client.write()

/** 获取套接字地址 */
sock address() localAddress localPort
/** 获取远程地址 */
remoteAddress remotePort
/** 使用套接字写数据 */
socket.write bytesRead bytesWritten
/** 控制套接字数据流的应用 */
/** socket.pause() resume() */

udp

/** 创建udp服务器 */
dgram.createSocket('udp4');
/** 事件 */
listening message error close
/** 绑定 */
server.bind(PORT, HOST) 

/** 创建udp客户端 */
dgram.createSocket('udp4');
/** 向服务器发送数据 */
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
	if (err) throw err;
	client.close();
});
client.bind(function () {
	<在其中可以调用setBroadcast(true)> // 发送广播数据包[广播或单薄]
	// 广播不会被路由器转发的
})

Web管理

http 和 https

/** 创建http服务器 */
http.createServer((req, res)=>{})
server.listen(port, [hostname], [acklog], [callback]);

/** res */
writeHead(statusCode, Options) - 重定向 {'Location': 'http://localhost:8686'} - url.parse(req.url).pathname
writeHeader(statusCode, [resonPhrase], [headers])
write(chunk, [encoding])
end([data], [encoding])
getHeader
setHeader

/** 创建客户端 */
http.request(options, function(res) {
	console.log('STATUS: ', res.statusCode);
	console.log('HEADERS: ' + JSON.stringify(res.headers));
	res.setEncoding('utf8');
	res.on('data', function (chunk) {
		console.log('BODY: ' + chunk);
	});
});


/** http.STATUS_CODES */
var http = require('http');
var querystring = require('querystring');
/** 定义响应状态码数组 */
var status_codes = new Array();
status_codes[0] = '201';
status_codes[1] = '202';
status_codes[2] = '203';
status_codes[3] = '401';
status_codes[4] = '402';
/**
 * 定义查询字段
 */
var postData = new Array();
for (var n=0; n<5; n++) {
	postData[n] = querystring.stringify({
		statuscodes: status_codes[n]
	})
}

/** 请求 */
http.get(options, callback) - url.parse - 模拟ping命令

express

/**
 * 安装Express开发框架
 */
npm install -g express-generator

express --version // 注意双横杠“--”

express -h
/**
 * 使用Express开发框架开发的Hello World
 */
express -e express-helloworld
npm install
npm start
/**
 * Express开发框架路由处理
 */
express -e express-routes
/** routes folder index.js */
var router = express.Router();
router.get('/', function(req, res, next) {
	res.render('index', {
		title: 'Express - Routes'
	});
});
module.exports = router; // 输出模型router
/**
 * 应用Express框架实现登录页面
 */
express -e express-login
npm install
/** login.js */
router.post('/login', function(req, res, next) {
	res.render('login', {
		title: 'Express - login',
		userid: req.body.userid,
		pwd: req.body.pwd
	});
});
module.exports = router;

数据库操作

mongoDB

var http = require('http'); // 引入HTTP模块
var mongodb = require('/usr/local/lib/node_modules/mongodb'); // TODO: 引入mongodb
console.log("Now start HTTP server on port 6868...");
console.info();
/**
 * 创建数据库服务器连接
 */
var server = new mongodb.Server(
	'localhost',
	27017,
	{
		auto_reconnect: true
	}
),
/**
 * 创建数据库连接
 */
var db = new mongodb.Db(
	'nodejs',
	server,
	{
		safe: true
	}
);
/**
 * 测试数据库连接
 */
db.open(function(err, db) {
	if (!err) {
		console.log('log - connect mongdb successfully');
	} else {
		console.log('log - ' + err);
	}
});
/**
 * 创建HTTP服务器
 */
http.createServer(function (req, res) {
	res.writeHead(200, { "Content-Type": "text/html;charset=utf8" });
		/**
		 * 测试数据库连接
		 */
		db.open(function*(err, db) {
			if (!err) {
				res.write('<p>Connected MongoDB:nodejs successfully!</p>');
				/**
				 * 连接数据集合
				 */
				db.collection('userinfo', { safe: true }, function(errorCollection, collection) {
					if (!errcollection) {
						res.write('<p>Connected MongoDB:nodejs:userinfo successfully!</p>');
						/**
						 * 查询方法一
						 */
						collection.find().toArray(function(errorfind, cols) {
							if (!errorfind) {
								res.write('<p>collection.find() is: </p>');
								res.write(JSON.stringify(cols));
								console.log(cols);
							}
						});
						/**
						 * 查询数据集合,方式二
						 */
						collection.find({userid: 'king'}).toArray(function(errorfind, cols) {
							if (!errorfind) {
								res.write('<p>collection.find({}) is: </p>');
								res.write(JSON.stringify(cols));
								console.log(cols);
							}
						});
						/**
						 * 查询数据集合, 方式三
						 */
						collection.findOne({username: 'king'}, function(errorfind, col) {
							if (!errorfind) {
								res.write('<p>collection.findOne({}) is,</p>');
								res.write(JSON.stringify(col));
								console.log(col);
							}
						});
						/**
						 * 插入MongoDB数据集合
						 */
						var insertCol = {userid: 'wang', pwd: '123456', username: 'wang'};
						collection.insert(insertCol, {safe: true}, function(errinsert, result) {
							res.write('<p>collection.insert() is: </p>');
							res.write(JSON.stringify(result));
							console.log(result);
						})
						/**
						 * 删除MongoDB数据集合
						 */
						collection.remove({userid: 'wang', {safe: true}, function(errremove, count) {
							res.write('<p>collection.remove() is: </p>');
							res.write(JSON.stringify(count)),
							console.log(count);
						});
						/**
						 * 更新MongoDB数据集合
						 */
						collection.update({userid: "king"}, {$set: {username:'king-update'}},
							function(errupdate, cols) {
								res.write('<p>collection.update() is: </p>');
							})
					} else {
						console.log('log - ' + err);
					}
				});
			} else {
				res.write('<p>Error Connected to MySQL!</p>');
				console.log('log - ' + err);
			}
		})
	});
}).listen(6868); // 监听6868端口号

Mysql数据库

var http = require('http');
var mysql = require('/usr/local/lib/node_modules/mysql'); // 引入mysql模块
console.log('Now start HTTP server on port 6868...');
console.info();
/**
 * 创建数据库连接
 */
var connnection = mysql.createConnection({
	host: 'localhost',
	user: 'root',
	password: 'root',
	database: 'nodejs',
	port: 3306
});
/**
 * 创建HTTP服务器
 */
http.createServer(function (req, res) {
	res.writeHead(200, { 'Content-Type': "text/html;charsert=utf8"});
	res.write("<h3>测试 Node.js - MySQL 数据库连接!<h3><br/>");
	/**
	 * 测试数据库连接
	 */
	connection.connect(function(err) {
		if (err) {
			res.end('<p>Error Connected to MySQL!</p>');
			return;
		} else {
			res.end('<p>Connected to MySQL!</p>');
		}
	});
	/**
	 * 查询数据库
	 */
	connection.query('select * from userInfo', function(error, rows, fields) {
		res.writeHead(200, { "Content-Type": "text/html;charset=utf8" });
		res.write("<h3>测试 Node.js - MySQL 数据库查询操作!</h3><br/>");
		res.end(JSON.stringify(rows));
	});
	/**
	 * 插入数据库
	 */
	connection.query('insert into userinfo(id,name,pwd) values(7, "genius", "12345678");', function(errorinsert, resinsert) {
		if (errorinsert) console.log(errorinsert);
		console.log('INSERT Return ===> ');
		console.log(resinsert);
	}
	/**
	 * 删除数据库
	 */
	connection.query('delete from userinfo where id=7;', function(errordelete, resdelete) {
		if (errordelete) console.log(errordelete);
		console.log('DELETE Return ===> ');
		console.log(resdelete);
	});
	/**
	 * 更新数据库
	 */
	connection.query('update userinfo set pwd="87654321 where pwd="12345678";', function (errorupdate, resupdate) {
		if (errorupdate) console.log(errorupdate);
		console.log("Update Return ==> ");
		console.log(resupdate);
	});
	/**
	 * 操作MySQL数据库连接池
	 */
	/**
	 * 获取数据库连接池
	 */
	pool.getConnection(function (err, conn) {
		if (err) {
			console.log("POOL ==> " + err);
			console.log();
		}
		/**
		 * 定义SQL查询语句
		 * @type {string}
		 */
		var selectSQL = 'select * from userinfo';
		/**
		 * 执行数据查询操作
		 */
		conn.query(selectSQL, function(err, rows) {
			if (err) {
				console.log(err); console.log();
			}
			console.log("SELECT ==> ");
			for (var i in rows) {
				console.log(rows[i]);
			}
			conn.release();		// 释放数据库连接
			res.writeHead(200, { "Content-Type": "text/html; charset=utf8" });
			res.write("<h3>测试Node.js - MySQL 数据库连接池操作!</h3><br/>");
			res.end(JSON.stringify(rows));
		});
	});
}).listen(6868);	// 监听6868端口号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值