NODEJS nodejs

  1. one

JavaScript 模塊化編程

網站愈來愈複雜,js代碼、js文件也愈來愈多,會遇到什麼問題?

1.命名衝突css

2.文件依賴問題html

什麼是模塊化

模塊化開發演變

全局函數

  • 命名衝突
  • 文件依賴的問題

對象封裝

  • 用命名空間的方式進行封裝
  • 先約定命名的規範的形式
  • 對象裏面的屬性和方法很容易被修改掉,很不安全

劃分私有空間

-經過匿名函數自執行的方法封裝模塊, -能夠保護私有變量和方法前端

模塊的維護擴展

  • 開閉原則,對修改關閉,對擴展開放。
  • 增長了代碼的健壯性和容錯性

模塊的第三方依賴

  • 模塊職責惟一性
  • 把依賴的模塊,經過依賴注入的形式,在你的參數上進行體現。

總結

  • 最大的問題,規範的問題
  • 若是在多人協做開發過程當中,會有很大的問題
  • 多人協做開發過程當中:代碼的風格必定要統一

模塊化規範

服務器端模塊化規範

瀏覽器端模塊化規範

  • AMD
    • RequireJS
  • CMD
    • SeaJS commonjs
  • node.js

SeaJS

基本使用

總體感知

定義模塊 define

  • 定義模塊 define(function(){})
  • 函數體內的方法屬性都屬於這個方法,對外有封裝性;解決了命名衝突問題,使js代碼有了封裝性
  • 直接調用 jQuery 插件等非標準模塊的方法 http://my.oschina.net/briviowang/blog/208587

啓動模塊 seajs.use

  • 加載入口模塊,咱們把define定義的js就叫模塊
  • 這個用於在html代碼裏面的加載

加載模塊 require

-加載文件依賴、模塊依賴的,用於define函數體內java

暴露接口 exports 和 module.exports

  • module.exports曝露出一個完整的對象,只能扔一次只能曝露出來一個
  • exports是module.exports的別名,能夠用來單個屬性、方法、對象的曝露,用.的形式,exports能作的事情module.exports也能夠作
  • 使用場景用.屬性的形式曝露屬性和方法的時候,並且是多個的時候用exports
  • module.exports直接等於的方式用,直接等於一個方法屬性對象等等~~~ ##requirejs 與seajs的區別 requirejs是優先加載的 seajs是懶加載的,就是有拖延症,用的時候才加載 http://www.requirejs.cn/

2. twonode

  • 程序中的模塊化jquery

    • 開發效率高 一次編寫屢次使用
    • 方便維護了(維護的成本更低)模塊之間有高耦合低內聚的特色
  • 爲何要在 程序 中使用 模塊化的開發方式linux

    • 命名衝突
    • 文件依賴

SeaJS 的使用

  • 定義模塊 define做用域就在define的函數體裏,三個參數require、exports、module
  • 加載模塊 require
    • 在一個模塊系統中,require 加載過的模塊會被緩存
    • 默認 require 是同步加載模塊的
  • 暴露接口 exportsmodule.exports exports是module.exports的別名,exports能作什麼,module.exports就能作什麼
  • 啓動模塊系統 seajs.use(callback)
    • seajs.use 和 Document 的 ready 沒有任何關係
    • 要想保證 文檔結構加載完畢再執行你的 js 代碼,必定要在 seajs.use 內部經過 window.onload 或者 $(function(){})
  • 分清楚前臺模塊化和node中的模塊化的區別
  • 掌握模塊化的思想

##1.解決幾個問題? ###1.前端、後端都是幹什麼的? 前端 作靜態資源的 後端 操控服務器的硬件的c++

國內一些創業公司用用的比較多,功夫熊(作上門保健的,美甲、按摩) 國外的一些大公司都有使用:Facebook、Twitter、Google 國內的一些大公司:Alibaba(天貓全部的頁面都是經過Node提供的服務)、Tencent、Baidugit

4.js開發 ###3.什麼是JavaScript? 一門腳步語言 須要嵌入html執行github

###4.瀏覽器中的JavaScript能夠作什麼? 校驗表單 操做dom 等等

###5.瀏覽器中的JavaScript不能夠作什麼? 操做服務器硬件

###6.瀏覽器與JavaScript是什麼關係? 瀏覽器解析js,目的是爲了讓計算機能看懂js,看懂01010101,機器碼、字節碼 編譯

內核-->js引擎

引擎 1.轉化 汽油柴油等等->轉化->成動能 模板+數據--->頁面 js代碼--->機器碼\字節碼 2.移植性 js引擎套一個殼子,寫js代碼傳給js引擎,操做硬件 node.js v8引擎去解析js

###7.JavaScript只能夠運行在瀏覽器中嗎?

##什麼是 Node?

  • https://nodejs.org/en/
  • node是js運行環境基於v8引擎 特色用事件驅動、無阻塞的io模型 優點輕量、高效
  • node是門技術不是語言 java java .net c# node js
  • Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
    • JavaScript runtime JavaScript 運行時
    • Chrome's V8 JavaScript engine Chrome 瀏覽器 V8 引擎
    • Node.js 是一個 構建於 谷歌的 Chrome 瀏覽器的 V8 引擎之上的一個 JavaScript運行時 環境
    • Node.js能夠解析和執行 JavaScript 代碼
  • Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.
    • event-driven 事件驅動模型
    • non-blocking I/O model 非阻塞IO模型 IO(input/output)輸入與輸出
    • lightweight[ˈlaɪtweɪt] 輕量級
      • 在軟件開發行業中,輕量級標識褒義詞
      • 輕量級也就意味着 運行速度快
      • 輕量級也就意味着有更好的 跨平臺 特性(平臺的差別性,兼容性)
    • efficient[ɪˈfɪʃnt] 高效的
    • Node.js的 事件驅動和非阻塞IO模型使得Node.js自己很是的輕量和高效
  • Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
    • package ecosystem npm 包生態系統 npm
    • largest 最大的
    • open source libraries 開源庫
      • 理論意義上 開源就表示有成熟的社區,開放源代碼
    • Node.js 的npm包生態系統,是世界上 最大的 開源庫 生態系統
    • 之前的 客戶端中 JavaScript 庫 散列在互聯網的各個地方
    • npm 就是 把你們常用的一些開源庫 給 組織到了一塊兒

Node 是一個能夠解析和執行 JavaScript 代碼的 運行時環境

  • Node.js 的做者
    • 瑞恩.達爾

Node 的實現結構

  • V8 JavaScript 解析執行引擎 ECMAScript
  • 中間層 (提供了文件操做、網絡操做登錄接口)更加接近操做系統的接口供開發人員使用
  • 硬件層

安裝與配置

3m安裝法 nvm npm nrm

安裝包的方式安裝

  • 問題1:安裝了node 沒有卸載 2:32和64搞混了 3:;拼寫錯誤,路徑錯誤
  • 下載地址:
  • 一路下一步 next
  • 如何確認是否安裝成功:
    • win + r ,而後輸入 cmd ,而後敲回車 就能夠進入 cmd 控制檯

nvm 安裝和管理咱們的 Node.js版本

nvm的安裝方式,node.js version manager 是一個node的版本管理工具
爲了解決node版本切換問題
右鍵在此電腦上點擊一下--》屬性---》系統---》高級系統設置---》環境變量
控制面板---》系統---》高級系統設置---》環境變量
NVM_HOME---C:\dev\nvm
NVM_SYMLINK--C:\dev\nodejs
新建一個path     %NVM_HOME%;%NVM_SYMLINK%

nvm 用法 查看版本號 nvm list 用哪一個版本(已經下載過的版本) nvm use 版本號 nvm use 版本號 32 下載相對應版本 nvm install 版本號 nvm install 版本號 32

nvm下載的是二進制版本

## 控制檯基本使用

容許用戶能夠在終端命令臺中與操做系統交互,其實就是輸入與輸出

### 如何打開cmd

1. 經過 按 window 鍵,輸入 `cmd` 打開cmd程序
2. 經過 `win+r`  輸入 `cmd`,敲回車就能夠進入

### 基本命令

- `dir` directory 列出當前目錄下全部的條目
  + 別名 `ls` 在 powershell 中可使用
- `cd` change directory 切換目錄

切換到當前目錄下的 Desktop 目錄 當想切換到當前目錄的時候,最好使用 cd ./ 相對路徑的形式 C:\Users\iroc>cd Desktop C:\Users\iroc\Desktop>

在Windows 上切換盤符: d:

切換絕對路徑以後再同一個盤符下才有效

切換到上一級目錄 C:\Users\iroc\Desktop\code\seajs>cd ../ C:\Users\iroc\Desktop\code>

連續進入多級目錄 C:\Users\iroc\Desktop\code>cd seajs/a C:\Users\iroc\Desktop\code\seajs\a>

- `cls` clear screen 清屏
  + 別名 clear 在widnows中的 `powershell` 中可使用

 windows下的尋址用\反斜槓 

### path 環境變量

目的是爲了在控制檯中的任何目錄均可以快速打開或者使用該可執行文件

環境變量就是用來存儲系統級別的變量

- 添加環境變量
  + 個人電腦 -> 右鍵選擇屬性 -> 高級系統設置 -> 切換到`高級`面板 -> 環境變量
  + 第一種方式:直接把可執行文件所屬的目錄 放到 PATH 環境變量中(若是沒有PATH環境變量,本身新建)
  + 第二種方式:新建一個環境變量,變量名規範:邏輯名_HOME 變量值:該可執行文件所屬的目錄
  + 注意:不管是直接添加的路徑仍是引用的變量名,必定要用 英文的分號 區分開
  + 引用變量名的時候,變量名兩邊都是 `%`

`> qq`
當你在控制檯中輸入一個程序的名字的時候,cmd 默認把它當成一個可執行文件去執行了,
優先找當前目錄下是否有沒有一個叫作qq.exe 的可執行文件,若是有,直接執行打開
若是沒有,cmd會進入 path 環境變量中 一個目錄一個目錄的挨着查找裏面是否有該可執行文件

## REPL(Read-eval-print-loop) 運行環境

用來測試一下代碼的,repl和chrome的控制檯很像

- 經過在控制檯中輸入 `node` 敲回車就能夠計入 REPL 運行環境
- 經過在REPL運行環境中 連續按兩次 `Ctrl+C` 就能夠退出 REPL 運行環境

## 執行js文件
 用node執行js文件,文件在當前目錄下---->node +文件名
 若是不在當前目錄下,node +文件路徑的形式執行
 相對路徑
 ./當前路徑
 ../上級目錄
 絕對路徑執行js的方式
 node c:\Users\cena\Desktop\code\01helloworld.js
## Global
global和window很像,都是全局對象
## CONSOLE

斷言 是用來測試用的 斷言就是假定一個條件,若是條件成立則不輸出任何內容,若是條件不成立則報錯還要輸出想要輸出的內容。 console.assert(條件,條件不成立輸出的內容); var foo=3; console.assert(foo==3,"失敗"); time() timeEnd()成對出現,計算在兩個方法中間的代碼的運行時間,傳入的參數要一致 console.time('test');

console.timeEnd('test1');

### __dirname 和 __filename
__dirnamee 用來找到當前文件夾的路徑
__filename 用來去到當前文件的路徑
不知道代碼要才哪使用的時候,用於靈活的寫代碼取路徑的時候。
它們屬於模塊做用域,能夠直接使用
它們兩個用來獲取路徑的,通常用於操做文件路徑的時候,纔會用到

## process

process 是一個全局可用對象,用來和咱們如今啓動中的node進行交互的
process.version取版本號
在控制檯作標準輸出
process.stdout.write(`123123`);
process.pid:當前進程的進程號。
process.version:Node的版本,好比v0.10.18。
process.platform:當前系統平臺,好比Linux。
process.env:指向當前shell的環境變量,好比process.env.HOME。
process.stdout:指向標準輸出。
process.stdin:指向標準輸入。
process.stderr:指向標準錯誤。
## 模塊系統
## node.js模塊化

一個js文件在node裏面咱們就理解爲一個模塊 require用來加載模塊 module.exports用來曝露屬性和方法的,由於模塊有封裝性,須要打破封裝性曝露方法和屬性來 exports是module.exports的別名,exports能夠作的事情,module.exports均可以作,exports只能用.的形式曝露屬性和方法

**3.three**


## 1.1 概念
- Node.js與JavaScript的關係?

  
- Node.js基於哪一個JavaScript引擎?

  
- Node.js的特色?

  
- Node.js只能運行在Windows上嗎?

## 1.2 cmd
- cd(change directory)切換目錄
- md(make directory)新建目錄
- rd(remove directory)刪除非空目錄
- dir(directory)查看目錄中的條目
 ` ls linux`
- ren(rename)重命名文件
- del(delete)刪除文件
- cls(clear screen)清屏
  `clear linux`

## 1.3 path 環境變量
- path環境變量的做用是什麼?
- 在Windows中配置path環境變量的方法是什麼?  

## 1.4 REPL(Read Eval Print Loop)交互式運行環境

- 做用:通常來講,能夠用來作一些API的測試

- 進入REPL運行環境
  
- 退出REPL運行環境

## 1.5 Node.js基礎知識
- 如何讓Node.js執行一個js文件
  `node 文件名`

-絕對路徑和相對路徑
  `.\或者..\ 相對路徑`
  `c:/xx/xx.js絕對路徑`
  `\ linux 根目錄
    windows 盤符的根目錄`


## 1.6 globals
- global
- \__dirname和__filename
  ` 關於這倆傢伙,通常在讀取文件的時候,最好使用絕對路徑的方式,經過這倆傢伙拼接 `
- console
  + assert(foo==1,"失敗");斷言
  + time('timer')
  + timeEnd('timer')
  + 成對的出現

## 1.7 模塊系統
- 什麼是模塊
  `一個文件就是一個模塊 `
- 模塊做用域
  `在一個模塊內變量、函數、對象都屬於這個模塊,對外是封閉的。 `
- require
  `require("路徑")`
  //路徑現階段使用相對路徑
- exports
  `是module.exports的一個別名、引用,exports能作的module.exports均可以完成。`
- module.exports 
  `最終曝露出去的對象,想曝露出去對象、屬性、方法就掛載到module.exports`

#2.模塊系統

##2.1模塊的種類

在Node.js中,模塊分爲兩類:

第一類,核心模塊(原生模塊),node自帶,用名稱直接能夠加載。

  • 核心模塊
    • fs file system
    • http
    • os
    • path
    • querystring
    • url ... 第二類,文件模塊,用路徑加載,有一種特殊的文件模塊----->包,能夠用名字。
module 是一個全局對象,它的做用是存儲模塊信息的,每個js是一個模塊,每個模塊裏面都有一個module,module裏面還存儲了父子結構
直接給module.exports賦值,exports是無效,用屬性的形式去賦值的時候兩者都有效


## 2.2 優先從緩存加載

common.js規範----->加載後,再次加載時,去緩存中取module.exports

## 2.3 require參數解析

核心模塊是Node.js原生提供的加載核心模塊的時候, 不須要傳入路徑,由於Node.js已經將核心模塊的文件代碼 編譯到了二進制的可執行文件中了 在加載的過程當中,原生的核心模塊的優先級是是最高的

![Alt text](./pic/image1.jpg)
- ./或../開始的相對路徑文件模塊
``` 在加載一個本身編寫的模塊的時候,最好使用__dirname 和 你要加載的模塊的文件名拼接 ```
- 以/開始的絕對路徑文件模塊
  • 在Linux或者MAc的操做系統中,/表示系統的根路徑
  • 在Windows中,/表示當前文件模塊所屬的根磁盤路徑 不建議使用,瞭解
- 標識符中能夠不包含擴展名
+ Node會按照`.js、.node、.json`的次序補足擴展名,依次嘗試

不包含擴展名的時候,Node.js會按照 路徑.js 之後本身在加載js文件模塊的時候,就省略掉.js後綴就能夠了 路徑.node 後綴爲node的文件是c/c++寫的一些擴展模塊 路徑.json 若是是加載json文件模塊,最好加上後綴.json,能稍微的提升一點加載的速度 .json文件最終Node.js也是經過fs讀文件的形式讀取出來的,而後經過JSON.parse()轉換成一個對象

Node.js會經過同步阻塞的方式看這個路徑是否存在
依次嘗試,直到找到爲止,
若是找不到,報錯
- require 加載包的時候

直接寫包名,先在包內的node_modules, 目錄下查找,去父級目錄下的node_modules目錄下查找, 依次向上查找,直到根目錄。

[參考文獻](http://www.infoq.com/cn/articles/nodejs-module-mechanism/)
# 3.包
還有一種特殊的文件模塊,其實就是包
- 問題:你開的一個功能模塊,仍是以文件的形式散列的,你給別人使用的時候很麻煩。
- 包的做用:在模塊的基礎上進一步組織JavaScript代碼

## 3.1 包的組成
- 包結構
- 包描述文件package.json
  + 描述你的當前的包的一些相關的信息
  +dependencies 
   -  包名:「版本號」 
   -  > +版本號   下載大於某個版本號,npm會下最新版
   -  < +版本號   下載小於某個版本號,npm會下小於這個版本號最新版
   -  <= 小於等於 必定會下你寫的這個版本,除非沒有你寫的這個版本
   -  >= 大於等於  下載最新版
   -   *、" "、X  任意 npm會給你下最新版
   -   ~ +版本號  會去下約等於這個版本的最新版,在大版本不變的狀況下下一個比較新的版本
   -   ^ +版本號  不躍遷版本下載,^2.1.0 npm會下載大版本不變,去下載2.x.x版本里的最近版
   
  

  [參考文獻 package.json全字段解析](http://blog.csdn.net/woxueliuyun/article/details/39294375)

## 
npm install -g fast-init
## 3.2 package.json

包的描述文件

package.json文件內部就是一個JSON對象,該對象的每個成員就是當前項目的一項設置,
好比name就是項目名稱,version就是項目的版本號

在模塊的加載機制中,有一個main屬性是很是重要的,它很大意義上決定了包要導出的模塊位置

## 3.3

# npm
- 基於Node.js開發的包的託管網站
- Node.js包管理工具

npm :基於包的規範實現的一個包管理工具

- npm install 包名

當執行npm install的時候,它會自動跑到npm的網站,而後找到該包的github地址,
找到以後,下載這個壓縮包,而後在執行npm install的當前目錄下找一個叫作node_modules目錄
若是找到,直接解壓這個壓縮包,到node_modules目錄下
若是找不到,則新建一個node_modules目錄,解壓到該目錄
- npm install -g 包名
   表示全局安裝   
   npm在安裝的時候,在全局設置了一個安裝目錄,只要是全局安裝就會把包安裝到這個目錄裏面去
   npm install -g 包名 只要是全局安裝就是安裝命令行工具

- npm install 縮寫 npm i

當執行npm install的時候,會自動在當前目錄中查找package.json文件
若是找到,找裏面的 dependencies 字段,安裝該字段中全部依賴的項
- npm docs 包名
  通風這個命令打開 包相對應的文檔
- npm install --save 生產環境
npm i -S jquery@3.*
我們之後在作項目的時候,先初始化一個package.json文件,
在安裝第三方包依賴的時候,必須使用npm install --save express,添加依賴項到package.json文件中,
實際就是添加到dependencies字段中

- npm install -save-dev 開發環境
npm i -D jquery@3.*
我們之後在作項目的時候,先初始化一個package.json文件,
在安裝第三方包依賴的時候,必須使用npm install --save express,添加依賴項到package.json文件中,
實際就是添加到devDependencies字段中


- npm config set prefix  修改全局安裝目錄
  不建議使用,建議去文件夾裏面改 C:\Users\用戶名  裏面有一個 .npmrc文件 
  去裏面改prefix = C:\dev\npm  (寫你的路徑)
  去全局的環境變量path裏把C:\dev\npm  路徑加進去



[參考文獻 npm的命令](https://docs.npmjs.com/)


# npm 這種東西的最終的目的就是:讓你的開發模式工程化,都依靠工具來管理
# nvm npm nrm
## 3m

nvm node版本的管理工具 npm node的包管理工具 nrm npm的數據源管理工具

npm install -g nrm
#4.文件操做
###4.1箭頭函數

箭頭函數就是一種語法糖 語法糖是一種語法,用這種語法能嚐到甜頭,能是編程高效 當函數體有一個參數有返回值的時候

var foo=function(v){ return v;} var foo=v=>v; 當函數體沒有參數有返回值的時候

var foo=function(){ return v;}

var foo=()=>v; 當函數體有多個參數有返回值的時候

var foo=function(v1,v2){ return v1+v2;} var foo=(v1,v2)=>v1+v2; 當函數體有多個參數沒有返回值的時候 var foo=function(v1,v2){ console.log(v1); console.log(v2); } var foo=(v1,v2)=>{ console.log(v1); console.log(v2); };

###4.2文件讀寫


- fs.readFile() 讀文件

fs.readFile(file, [options], callback)
//file 讀文件的路徑
//options 用[]包裹的可選參數,object {"encoding":"uft8","flag":"r"}  string 'utf8'
//callback function  callback函數裏面有兩個參數 
//err表示錯誤對象,若是readFile發生錯誤了,在callback函數裏面會回返回err,err對象裏面存着錯誤信息
//如何讀文件成功,err爲null
//data就是讀文件,讀出來的內容。

- fs.access(path,[mode], callback) 用來判斷文件是否存在
//path 判斷路徑是否正確(也能夠判斷文件)'./pic'
//mode通常不用,默認就能夠了,用的話是用來判斷文件是否可讀可寫可執行
//callback 只有一個參數err,錯,文件有問題

# 其它

- vsc教程[http://i5ting.github.io/vsc/](vsc教程)


2.npm 和package.json結合着連
npm init    初始化package.json
npm install   先配置package.json裏的devDependencies dependencies字段
npm i -S +包名 npm install –save  不光能下載包,還能把依賴添加到package.json
npm i -D +包名 npm install –save-dev 不光能下載包,還能把依賴添加到package.json
npm docs 包名  查看包的相關文件 jquery、mongoose、http-poster
npm list 當前目錄有什麼包,檢測node_modules裏面有什麼
npm install –g 包名  全局安裝 cnpm、nrm
3.cnpm
4.nrm 
安裝目錄npm install -g nrm
nrm ls 查看數據源
nrm test 測試你的網連那個npm的數據源快
nrm use 切換數據源
5.閱讀參考文獻 樸靈 require
閱讀參考文獻 package.json全字段解析
6.github




1. **4.four**

## 1.0 nvm經常使用命令
- nvm項目地址:[nvm-github地址](https://github.com/coreybutler/nvm-windows)
- 查看全部已安裝的本地的node版本
`nvm list`
- 切換node版本
` nvm use 版本號`
- 安裝指定版本的node
` nvm install 版本號 位數`
- 卸載已安裝的指定版本的node
` nvm uninstall 版本號`

###1.1模塊的分類

```模塊分爲核心模塊、文件模塊,其中包是一種特殊的文件模塊 ```
- 核心模塊
  + fs file system
  + http
  + os
  + path
  + querystring
  + url

###1.2模塊三兄弟 require、module、exports

- require的實現原理

```把代碼從文件中讀出來,用匿名函數的方式頭尾包裝,返回modules.exports對象,曝露出想要曝露出來的屬性、方法、對象。
   補充了exports是指向modules.exports的一個指針,exports能作的,modules.exports都能作的。
  • require查找文件、包原理
第二次加載的時候優先從緩存查找讀取,
   node_modules中沒有的,從父文件夾中查找,若是沒有,直到根目錄爲止
  • module
裏面保存了模塊的信息路徑、父子信息、曝露出的對象信息
  • exports
module.exports 別名
module.exports=123;已經使用過一次了,exports就不生效了
module.exports.a=12;這樣使用,exports是還可使用的

###1.4包

package.json是包的說明書,
   dependencies當前包所依賴的包:>、<、>=、<=、~、*、" "、X、^、
    devDependencies 開發環境中包所依賴的包:

###1.5npm

npm init  建立package.json文件
  npm install  將package.json中的文件依賴的包從網上下載到本地
  npm install -save 包名  將包下載下來而且加載到dependencies中去
  npm i -S 包名 替代上面的命令
  npm install -save-dev 包名 將包下載下來而且加載到devDependencies中去
  npm i -D 包名 替代上面的命令
  npm install -g 包名 全局安裝  安裝的是全局工具
  npm docs 包名 查看包的文檔

###1.6nrm npm的數據源管理工具

nrm ls 查看npm的數據源
nrm use 切換npm下載包的地址
nrm test  測試下哪一個數據源快

1.7 3m

npm node的包管理工具 nvm node的版本管理工具 nrm npm的數據源管理工具 ###1.8箭頭函數

語法糖替代function(){}  v=>v

#2.i/o ###2.1什麼是i/o?

io input、output 輸入輸出,電腦的輸入輸出,例如音頻錄音表示聲音輸入、聽音樂是聲音的輸出
   網絡上的傳輸所有是在傳字符串,i/o在服務器上能夠理解爲讀寫操做。

###2.2什麼是併發?

一個時間段中有幾個程序都處於已啓動運行到運行完畢之間。

#3異步i/o與事件驅動 ###3.1什麼是進程?

進程是爲運行當中的應用程序提供運行環境的
一個運行當中的應用程序就會有一個進程與之相對應

###3.2什麼是線程?

線程是用來運行應用程序中代碼的,
一個線程在一個時間只能作一件事件。
多線程,調度起來很麻煩。
node是單線程執行,用異步替代了多線程

###3.3同步、異步有什麼不一樣?

異步不會阻塞後面的代碼,同步會阻塞後面的代碼
一條線程先執行同步的代碼後執行異步的代碼。

###3.4異步非i/o操做和異步i/o操做

異步非io setTimeout setInterval
異步IO操做 操做文件 網絡操做 fs

###3.5node的事件驅動模型? Alt text

 

###3.5異步和多線程的比較?

node的異步是幫助咱們去作了多線程的操做,簡化了代碼

#4.文件操做 ###4.1文件的完整讀寫

fs模塊---》操做文件---》io----》node的特長
fs模塊是node很是重要的模塊,能體現出node的優點
  • fs.readFile() 讀文件
  • fs.writeFile() 寫文件
  • fs.appendFile() 在文件的內部去追加寫一些內容
  • fs.mkdir() 建立文件夾
  • fs.readdir() 讀文件夾
  • fs.access() 判斷路徑
  • fs.stat() isFile:用於判斷被查看的對象是否爲一個文件,若是是返回true,不然,返回false; isDirectory:用於判斷被查看的對象是否爲一個目錄,若是是的話則返回true,不然,返回false; isSymbolicLink:用於判斷被查看的文件是否爲一個符號連接文件,若是是的話則返回true,不然,返回false。該方法僅在lstat方法的回調函數中有效;

#5.異常處理 什麼是異常? 計算機不能處理的情況稱之爲異常 try catch 只能捕獲同步異常 try { fs.accessSync('./02sfdasdfio.js'); } catch (err) { console.log("1"+err); } 異步異常對象和被try catch捕獲的對象是同樣的

#6.path

console.log(path.basename('C:\temp\myfile.html'));

console.log(path.basename('/foo/bar/baz/asdf/quux.html', '.html'));

console.log(path.dirname('/foo/bar/baz/asdf/quux.js'));

console.log(path.extname('/foo/bar/baz/asdf/index.js.css.html'));

相關文章
相關標籤/搜索