學習 Node.js 筆記(二)

繼續學習 Node.js html

== 文件操做 == 前端

NodeJS 對比瀏覽器中的 js 重點(進步)是能操做文件... 經過內模塊 `fs' (文檔...) node

實驗一下, 進入 node 交互命令行: web

> var fs = require('fs'); // 引入 fs 模塊
undefined  // node 響應
> fs   // 顯示一下 fs 這個對象
 ... ... ... 大量內容, 對象被顯示出來...
> var temp = fs.readFileSync('hell.txt');
> temp;  // 顯示讀入的是什麼
<Buffer 12 34 56 ... 一大堆二進制表示的字節吧... >

(至少能快速實驗一下)
後面又實驗了一下, fs 彷佛初始就有此變量, 不須要 require ...?

API 蜻蜓點水 shell

能夠看官方文檔(估計須要再去查), 如 https://nodejs.org/api/buffer.html 編程

彷佛(缺省?)可用對象: assert, buffer, child_process, cluster, console, ... (內建?) 設計模式

NodeJS 帶一個內建的調試器: api

$ 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)

相關文章
相關標籤/搜索