文档章节

学习 Node.js 笔记(二)

刘军兴
 刘军兴
发布于 2015/11/26 16:54
字数 908
阅读 57
收藏 1

继续学习 Node.js

== 文件操作 ==

NodeJS 对比浏览器中的 js 重点(进步)是能操作文件... 通过内模块 `fs' (文档...)

实验一下, 进入 node 交互命令行:

> var fs = require('fs'); // 引入 fs 模块
undefined  // node 响应
> fs   // 显示一下 fs 这个对象
 ... ... ... 大量内容, 对象被显示出来...
> var temp = fs.readFileSync('hell.txt');
> temp;  // 显示读入的是什么
<Buffer 12 34 56 ... 一大堆二进制表示的字节吧... >

(至少能快速实验一下)
后面又实验了一下, fs 似乎初始就有此变量, 不需要 require ...?

API 走马观花

可以看官方文档(估计需要再去查), 如 https://nodejs.org/api/buffer.html

似乎(缺省?)可用对象: assert, buffer, child_process, cluster, console, ... (内建?)

NodeJS 带一个内建的调试器:

$ node debug hello.js
< Debugger listening on port xxxx 
debug> . ok
...
debug>help
Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), 
setBreakpoint (sb), clearBreakpoint (cb), watch, unwatch, watchers, 
repl, restart, kill, list, scripts, breakOnException, breakpoints, version
debug>

虽然有点简陋, 但总比没有强...

 

NodeJS 最精华的异步 IO 模型在 fs 模块中有体现:

fs.readFile(filename, function(err, data) {
  if (err) deal-with-error;
  else deal-with-data;
});

示例: 通过 同步读取目录/文件 => 递归 => 回调 实现 travel(dir, callback) -- 目录遍历函数.
   也有异步版本, 要是没有必要, 还是暂时不学异步版了.

 

 

== 网络操作 ==

NodeJS 可以编写一些服务器端程序来协助前端开发和测试. (例如做 WebSocket 服务器)

实现 hello-world 的 web-server 例子(略).

对应模块有 http, https, url, querystring, net, socket 等.
这里很多需要 socket, http协议知识. (知识太多,学不过来...)

zlib 模块可能也需要, 对于那些带压缩的 http 数据.

 

== 进程管理 ==

通过产生新进程, nodejs 能够调用(别的)终端命令(或程序) 来做事情(像 shell,批处理)

(这是一种强大的思想和能力, 自己花时间做不如用别人现成的, 现成没有或不足用再自己干...)

var worker = require('child_process');
worker.exec('copy x y', callback() {
    print('Work complete~');
  });

注: 子进程是异步运行的(应该说是自己独立运行的), 通过回调函数返回执行结果.

进程间通信: 如果父子进程都是 nodejs 进程, 则可通过 IPC 双向传递数据.

process.on('message', callback(msg) { ... });  收到(父进程传递来的)该消息时做处理... (这里像 websocket)
msg 在发送端用 JSON.stringify 序列化, 接收端用 JSON.parse 反序列化.

 

 

== 异步编程 ==

NodeJS 最大的卖点 --- 事件机制,异步IO.

直接体现是回调. (前面见到很多了)

异步编程有特有的代码设计模式.
   同步下:                  异步下:
   函数返回值    -->    回调函数
   遍历数组       -->    串行处理(如果可并行处理, 需更多特定标志)
   异常处理       -->    回调中额外带 err (catch 住的异常)参数.

异常增加了编程复杂度. (如果没有效益, 还是少用为好...)

 

== 域 ==

NodeJS 提供 domian 模块, 可以简化异步代码的异常处理. 简而言之, 一个域是一个 JS 运行环境.

NodeJS 的大量 API 使用 C/C++ 实现的, 如果运行过程中出现异常可能会打断正常代码执行流程,
导致 C/C++ 部分有异常, 进而导致xxx. 最好处理完异常后重启程序...

 

 

== 一个大的示例 ==

通过多次迭代开发(演示)一个简单静态文件合并 server. (略)

 

原作者建议:
   1. 要熟悉官方 API 文档.
   2. 要先设计再实现.
   3. 要实现后再设计. (意思是要迭代)
   4. 要充分利用三方包.
   5. 不要迷信三方包.

(END)

© 著作权归作者所有

共有 人打赏支持
刘军兴
粉丝 54
博文 184
码字总数 226359
作品 0
昌平
一点感悟:《Node.js学习笔记》star数突破1000+

写作背景 笔者前年开始撰写的《Node.js学习笔记》 github star 数突破了1000,算是个里程碑吧。 从第一次提交(2016.11.03)到现在,1年半过去了。突然有些感慨,想要写点东西,谈谈这期间的...

程序猿小卡_casper
06/06
0
0
效率至上的nodejs 手动实现服务器

这是一个连续的node学习笔记, 本文是第一章, 会持续更新, 持续完善 python好用,用久了就会把人的脾气养起来, nodejs不好用, 但效率很好, 也能彻底治好你的坏脾气 nodejs的回调是我用过的最蛋...

木子昭
08/20
0
0
appium 安装教程链接整理

Appium 做Android 自动化测试环境搭建+示例代码运行 :http://blog.csdn.net/pajack/article/details/29390031 安装eclipse的maven插件:http://jingyan.baidu.com/article/60ccbceb01de4d64......

智能小松鼠
2014/11/26
0
2
nodejs实践--模块Request学习

官方文档 npm官网--request 文章来自:Request —— 让 Node.js http请求变得超简单 先前一直比较关注前端的东西,对后端了解较少。不过一直对Node.js比较感兴趣,去年12月还去参加了阿里的C...

spinachgit
08/30
0
0
细谈Node.js----我的笔记

学习心得 如何利用Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的 Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。N...

crossmix
2016/01/04
221
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL count(*) 和count(1)的区别

开发中经常会使用这两个聚合函数,作用都是用来统计记录行,今天查找资料发现,其实这两个函数并没有区别, 实践才是检验的标准,首先看执行计划(表是我自己建立的): 可以看到,两个执行计...

一曲图森破
12分钟前
1
0
ppwjs之bootstrap文字排版:字体设置

<!DOCTYPT html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>ppwjs欢迎您</title><link rel="icon" href="/favicon.ico" ......

ppwjs
15分钟前
1
0
区块链100讲:详解区块链之P2P网络

1 P2P网络 如果我们简单来看 P2P 技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯、从文件共享到协同处理,多种领域都有它的身影出现。 同样的,P2P 的网络协议也有很多,比较常见的...

HiBlock
30分钟前
0
0
74.expect脚本同步文件以及指定host同步文件 构建分发系统文件和命令

20.31 expect脚本同步文件: 在expect脚本中去实现在一台机器上把文件同步到另外一台机器上去。核心命令用的是rsync ~1.自动同步文件 #!/usr/bin/expect set passwd "123456" spawn rsync -a...

王鑫linux
54分钟前
1
0
TypeScript项目引用(project references)

转发 TypeScript项目引用(project references) TypeScript新特性之项目引用(project references) 项目引用是TypeScript 3.0中的一项新功能,允许您将TypeScript程序构建为更小的部分。 通过这...

durban
59分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部