Nodejs學習筆記-1


目前nodejs的最新版本是:

在官網下載 nodejs.version.x86.msi/exe ,然后安裝. 然后運行node hello.js
就像php的php命令, java中的javac等命令行命令一樣. 其中console.log就是在cmd的控制台(類似c語言的命令行程序print)輸出.

下載的網站, 包括原始 的 官方的站點,就是: https://nodejs.org/(但是很緩慢), 可以使用nodejs.cn相當於一個中文的映射站點, 速度很快: nodejs.cn

下載的內容包括: node.exe, node.lib, node_pdb.zip(pdb: private本地調試/public遠程調試 debug文件, 是exe/application跟源代碼之間的橋梁,通過pdb才能看到代碼執行的行和監視變量 )
下載時, 只需要下載node.exe就好了. (不要直接在下載列表中下載,那個是從原始地址 nodejs.org下載...)

node.js不應該看作是一個/一種js文件, 也不是一種js語言, 而應該看作是一種服務器端的web腳本開發語言, 如同php一樣, 看作是"node.js"一個整體.

在windows下安裝最新的 node-v6.10.2-x86.exe, 會自動安裝npm並注冊到path全局路徑(包括node, npm等).

現在的node.js版本飆升很快, 幾乎一個月就在升級一次, 現在這個時間點, 下載的是 v6.10.2版本, 其中包括v8, npm等版本號..

node.js輸入命令node后, 就進入node的交互界面, 如同mysql, php, matlab等交互界面環境,在這個環境中, 就可以進行變量賦值/輸出, 語句的執行等等.

由於node.js實際上是用C語言在linux下開發(后)/移植到win上的, 所以即使在win中, 也可以使用linux的shell的操作方式, 包括ctrl+p, ctrl_N, ctrl_h等操作...

node.js中, 字符串可以加上一個數字, 但是 一個字符串*n, 將會 返回 NaN. (not a number), 其他在nodejs中的操作, 跟 前端的js 腳本的語法基本上是一樣的, 比如也支持function函數的定義等,
而且, node.js的命令行, 還支持shell下的 tab 補全和提示.


node.js的創始人 Ryan Dahl: 瑞達爾. 最開始選擇嘗試了 Lua, C, Haskell(是美國的邏輯學家, haskell是一種函數式編程語言, 如同c語言一樣).
nodejs是一種事件驅動, 非i/o阻塞的輕量化的服務器端腳本語言.

隨着網絡的發展, 現在的b/s程序已經基本上/大量地代替了c/s程序.

libuv 是 Node 的跨平台抽象層,跨平台事件庫, 封裝了windows和類unix系統的事件庫: 用於抽象 Windows 的 IOCP 及 Unix 的 libev(libevent事件庫)
作者打算在這個庫的包含所有平台的差異性。特性: 非阻塞 TCP 套接字, 非阻塞命名管道...
libuv中的uv是指: ultra libevent(libev)的意思:

在node的命令行界面, 輸出后顯示 "undefined" , 是表示沒有定義返回值. 如果有返回值 則不會輸出"undefined"

特殊的命令, 如.help, .break, .exit, .load .editor等是對命令行模式的操作, 需要使用帶點的命令..


nodejs跟前端js的語法基本一樣, 大量的使用了 "匿名函數, 回調函數, 閉包", 定義變量也是采用var的方式, 不顯式聲明變量類型. 跟js是一樣的語法.
在多個options並列的參數時, 使用{} 表示的對象...

nodejs的執行方式, 就好象nodejs是一個程序一樣, 如同apache一樣, 但是他比apache要更簡單, 沒有那么多, 那么復雜的什么服務啊, 什么進程啊, 什么daemon啊的概念
. 只要你執行一下node your_server.js, 你的服務器就啟動了.

windows下,使用curl.

curl是用來在命令行獲取網頁/內容的應用程序, 而且通過選項可以 看到request/response的一些細節.

給某一個命令 增加環境變量,可以有 兩種方式:
一種是, 直接在path變量中, 輸入命令路徑;
二種, 是先創建一個命令的環境變量foo,(隨便什么名字都可以), 然后在path變量中, 增加這個環境變量. 引用環境變量的格式 : %foo%

還有一種方式, 是將命令本身或其快捷方式 放在 c:\windows\system32下.

windows下curl的使用方法: 參考: http://www.tuicool.com/articles/Ar6vymf

  1. windows的curl-win32的下載地址是: 在curl的首頁中, 搜索: win32, 找到windows平台的下載地址,然后鏈接:

curl實際上是一個 "文件傳輸工具" 支持的協議包括很多(注意區別, 一個是文件傳輸協議, 如http, ftp等, 另一個是文件傳輸的工具, 這個工具利用/支持這些文件傳輸協議...)

curl的幾個比較重要的options: 參考: http://www.cnblogs.com/gbyukg/p/3326825.html

  • curl -o (這個是寫入到指定的文件中), 默認的是下載輸出到stdout. (這個選項也可以使用重定向: curl http://localhost > foo.html)

  • curl -O : 這個是保持到(當前目錄中), 保持原來的文件名不變

  • curl -i: 輸出文件頭信息 + 文件本身的內容

  • curl -I : 只輸出文件頭信息

  • curl -v: 是verbose, 輸出詳細過程

  • curl -V : 是version, 顯示版本號 注意-v和-V是不同的:

  • curl -C -o foo.html http://localhost -C 表示continue , 默認的curl是會重新下載原來未下載完成的文件, 加-C則會斷點續出.

  • --limit-rate是真正的限速, 而-Y, 或 --speed-limit是表示低於這個速度, 則停止下載, 相當於規定最低速度. 而--limit-rate相當於規定最高速度

  • 還有一些 -u等命令

  • curl -X COMMAND , 表示你請求的命令方法, 如是get, post, put, delete等等, 這個一般不用, 即使使用, 最多的也主要是get. curl -i -X get http://localhost/


注意nodejs 的執行方式: 需要開啟兩個cmd cli命令行界面: 一個是用來啟動node.js服務器, 其中服務器的名字, 就是你寫的js文件: node c:\wamp\www\server.js 另一個才是用 curl來測試 服務器上的內容...

下面的圖形, 分析了node.js的執行過程:

  1. node.js是一個程序 , 軟件, 可以單獨執行, 跟apache, wampserver等服務器沒有什么關系
  2. 分成兩個部分. server端啟動時 node server(注意不用加js后綴名),js文件此時並不會馬上執行, 只是出於daemon狀態. 直到 有客戶端 通過curl, firefox等瀏覽器來請求這個 服務器對應的端口時, 由node server 來監聽這個端口. node才會將 server.js的內容輸出.
  3. server.js輸出的內容, 分成兩部分, 一部分是輸出到服務器上的, 如console.log等的輸出, 另一部分是 response對象的end("輸出到請求端的信息內容...")方法輸出的內容, 這部分內容是輸出到客戶端client請求端的.

nodejs的調試過程:

  1. 使用命令是: node debug your_nodejs_filename
  2. debug中的命令, 命令行跟 ide調試方法是一樣的, 如setbreak : sb設置斷點, continue: cont等等.
  3. 應該先設置斷點, 然后才進行調試,
  4. 在調試模式下, 可以通過輸出變量的值 , 來查看程序的錯誤...

停車是一門學問, 要看停車的環境, 平整度等等 . 總之一點就是: "最好的停車, 是盡量保持車輛的 各零部件處於不 受力的狀態" 如果在平整路面熟悉的環境中, 可以: 先空檔手剎, 熄火, (但是注意, 此時, 車輛的 輪胎, 懸架等仍然處於受力的狀態, 而且這種力量是由 手剎的鋼絲/彈簧在承受的), 因此, 要解除這種應力: 再次松開手剎!!!, 備剎車, 等到汽車平穩后, 應力完全釋放后, 再拉起手剎, 平整熟悉路面環境, 可以直接用一檔檔位來卡, 不用拉手剎. 因為手剎拉起就要工作, 而檔位本身(注意在應力完全釋放后)不工作. 只是起到"防御性"的作用! (但是要注意 用檔位來卡, 一定要等到應力釋放完后, 否則也有應力作用在齒輪上 總之, 要讓車輛處於無 應力, 完全不受力的狀態!

npm和cnpm的區別?

npm的速度被牆的很慢, 使用cnpm: npm的鏡像來管理nodejs包.
cnpm跟npm用法完全一致,只是在執行命令時將npm改為cnpm(以下操作將以cnpm代替npm)


nodejs導入模塊(模塊就相當於c++中的類, tp中的include/require), 使用的語句也是: require: var http= require('http');

node執行一個目錄的時候, 如果不指定文件名, 會自動搜索這個目錄下的index.js文件進行執行.
或者在目錄下 執行 點命令: node .

包的類型有三種:
core modules
node_modules(這個是第三方的包) 安裝其他模塊時, 會創建node_modules這個目錄
local_modules, 本地模塊, 是自己寫的模塊.

如何創建本地模塊?

創建文件 myModule.js

var name= "foo";
module.exports.name = name;  //這里要使用關鍵字 module. exports.. 等...


然后在 你自己的js文件中, 通過: require('myModule'); 這里的myModule就是你創建的本地文件的名稱. 就好了...

注意sever和server的區別, 前面sever中, 沒有ser, 只是se. 表示"割裂, 斷開(關系)" a knife to sever any relationship with sb.

linux世界中的常用 通用快捷鍵:

  1. linux里面, 查看文件/系統/設備等的信息, 都是用 ctrl+I 快捷鍵.**
  2. 顯示和隱藏".開頭的文件/目錄" 使用ctrl+H, 注意不是super_H, 后者是隱藏當前窗口.

免費軟件有: free, gratis[gr2tis], libre(自由). (不同於 liberate, liberation解放)
openOffice.org原來是sun公司,被oracle收購后加強了版權,然后google-redhat-Novell成立了the document fundation組織.開發了完成自由的libreoffice. 現在的很多linux dist都默認自帶的 LibreOffice. 而且Libre比open對word的兼容性更好.

微軟的word等office中 自帶了simsun.ttf字體, (其實就是宋體, 它是ms向中易中標電子信息co.購買的, 然后改名的). 而Libreoffice由於沒有宋體(simsun.ttf)字體, 所以中文顯示為亂碼


關於字體文件simsun.ttc?
ttc: compose是兩個ttf字體文件的合並, 兩個ttf文件中的漢字通常是一樣的, 而英文字母的寬度等可能不一致, 就把兩個基礎的基本的base- ttf文件(simsunb.ttf) 合並成一個ttc文件.

全局配置和 當前用戶配置的區別?

  1. 全局配置就是將配置文件, 放在系統的相關文件夾中, 如 放在linux的字體目錄默認是在: /usr/share/fonts下, 這時行, 所有的用戶都可以訪問.
  2. 用戶配置, 就是只對當前用戶生效的, 通常放在 ~/.config目錄中, 或者~/.libreoffice等app_name目錄中.比如, Libreoffice的用戶字體文件就放在 ~/.config/libreoffice/4(版本號,fc23的版本號是5了)/usr/fonts(fonts目錄要自己去創建) , 然后將ttc字體文件 cp到 fonts目錄中即可. 在這之后, 就可以創建和保存,打開 包含中文字體的doc文件了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM