本文同步自我的个人博客:
最近看到群里不少大神都开始玩 node 了,我感觉跟他们步伐越来越大了,
为了追逐他们的步伐,必须把 node 技能 get 起来。hello world!
node 这货,接触也有快2年了吧,不过1年前才开始用,仅仅是用而已。
因为那时候接触 grunt 以及后来的 gulp 然后渐渐的熟悉了 node。 当时的 node 官网,首页就是一个简单的 http 例子。var http = require('http');http.createServer(function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n');}).listen(8124);console.log('Server running at http://127.0.0.1:8124/');
当然现在也是这个例子,只是没放首页。
其实我当时是不感冒的,因为对于phper来说,。。。算了,不扯则个了。 反正当时只是为了用 grunt/gulp 而已,其他都无所谓。入门
虽然之前也断断续续打算学,但是都没用下决心,往往是看一下,就不看了。
以至于到现在连自己写 gulp 都不会,只会各种复制黏贴。 这次是真的下决心学习了,哪怕慢慢学,也要坚持学习下去。跟着网上教程走,第一篇是 process
的一些操作,我觉得除了 process.argv
获取命令行参数, process.env
获取环境变量,其他不太常用,至少我现阶段用不到,所以只是简单的测试了下,就直接到了 部分。
fs 是文件操作,我之前写爬虫,以及最后的文件数据整理,都是 php 做的,现在学了 node 之后肯定尽量 node 上了。
下面我就简单记录下常用的方法,反正用法,中文文档,百度上满大街都是。结合 官网文档来学习。
Sync 后缀方法
打开文档发现每个方法都有两个,其中有一个就多了个 Sync 后缀。
什么是同步异步,事件驱动,非阻塞I/O 这些学术性的东西我就不多说了,自行搜索,这里只说他们最明显的区别。 比如fs.rename
和 fs.renameSync
,前者是要传入回调参数,当完成或遇到错误后会执行回调函数,而 Sync 同步方法,如果遇到错误了,直接抛出,导致js中断。 fs.rename('123.txt', '321.txt', function (err) { if (err) { console.log(err); // 遇到错误 } console.log('完成');});
try { fs.renameSync('123.txt', '321.txt'); console.log('完成');} catch(err) { console.log(err); // 遇到错误}
就是这么个区别,一个和谐报错,一个要手动 catch 错误信息。
文件读写
fs.read
, fs.write
和 fs.readFile
, fs.writeFile
, fs.appendFile
前者比较底层,需要结合 fs.open
打开文件得到文件句柄,然后基于文件句柄读写。
fs.readFile
, fs.writeFile
, fs.appendFile
这三个方便的。 var fs = require('fs');// 写入数据, 文件不存在会自动创建fs.writeFile('123.txt', 'Hello Node!', function (err) { if (err) throw err; console.log('写入完成');});// 添加数据fs.appendFile('123.txt', '添加数据,默认 utf8 格式', function (err) { if (err) throw err; console.log('添加完成');});// 读取数据fs.readFile('123.txt', function (err, data) { if (err) throw err; console.log(data.toString());});
好了,简洁明了,写入,添加,读取,都OK了。
不过我想大家也会跟我一样会有个疑问,fs.readFile
是全部载入,那如果文件很大怎么破?
这个就之后 Stream 部分细说了。