# Node.js 第1天
## 上午總結(jié)
- Node.js 是什么
? + JavaScript 運(yùn)行時(shí)
? + 既不是語(yǔ)言缘眶,也不是框架,它是一個(gè)平臺(tái)
- Node.js 中的 JavaScript
? + 沒有 BOM、DOM
? + EcmaScript 基本的 JavaScript 語(yǔ)言部分
? + 在 Node 中為 JavaScript 提供了一些服務(wù)器級(jí)別的 API
? ? * 文件操作的能力
? ? * http 服務(wù)的能力
## 總結(jié)
- Node 中的 JavaScript
? + EcmaScript
? ? * 變量
? ? * 方法
? ? * 數(shù)據(jù)類型
? ? * 內(nèi)置對(duì)象
? ? * Array
? ? * Object
? ? * Date
? ? * Math
? + 模塊系統(tǒng)
? ? * 在 Node 中沒有全局作用域的概念
? ? * 在 Node 中,只能通過(guò) require 方法來(lái)加載執(zhí)行多個(gè) JavaScript 腳本文件
? ? * require 加載只能是執(zhí)行其中的代碼,文件與文件之間由于是模塊作用域雇卷,所以不會(huì)有污染的問(wèn)題
? ? ? - 模塊完全是封閉的
? ? ? - 外部無(wú)法訪問(wèn)內(nèi)部
? ? ? - 內(nèi)部也無(wú)法訪問(wèn)外部
? ? * 模塊作用域固然帶來(lái)了一些好處,可以加載執(zhí)行多個(gè)文件颠猴,可以完全避免變量命名沖突污染的問(wèn)題
? ? * 但是某些情況下关划,模塊與模塊是需要進(jìn)行通信的
? ? * 在每個(gè)模塊中,都提供了一個(gè)對(duì)象:`exports`
? ? * 該對(duì)象默認(rèn)是一個(gè)空對(duì)象
? ? * 你要做的就是把需要被外部訪問(wèn)使用的成員手動(dòng)的掛載到 `exports` 接口對(duì)象中
? ? * 然后誰(shuí)來(lái) `require` 這個(gè)模塊翘瓮,誰(shuí)就可以得到模塊內(nèi)部的 `exports` 接口對(duì)象
? ? * 還有其它的一些規(guī)則贮折,具體后面講,以及如何在項(xiàng)目中去使用這種編程方式资盅,會(huì)通過(guò)后面的案例來(lái)處理
? + 核心模塊
? ? * 核心模塊是由 Node 提供的一個(gè)個(gè)的具名的模塊调榄,它們都有自己特殊的名稱標(biāo)識(shí),例如
? ? ? - fs 文件操作模塊
? ? ? - http 網(wǎng)絡(luò)服務(wù)構(gòu)建模塊
? ? ? - os 操作系統(tǒng)信息模塊
? ? ? - path 路徑處理模塊
? ? ? - 呵扛。每庆。。今穿。
? ? * 所有核心模塊在使用的時(shí)候都必須手動(dòng)的先使用 `require` 方法來(lái)加載缤灵,然后才可以使用,例如:
? ? ? - `var fs = require('fs')`
- http
? + require
? + 端口號(hào)
? ? * ip 地址定位計(jì)算機(jī)
? ? * 端口號(hào)定位具體的應(yīng)用程序
? + Content-Type
? ? * 服務(wù)器最好把每次響應(yīng)的數(shù)據(jù)是什么內(nèi)容類型都告訴客戶端蓝晒,而且要正確的告訴
? ? * 不同的資源對(duì)應(yīng)的 Content-Type 是不一樣腮出,具體參照:http://tool.oschina.net/commons
? ? * 對(duì)于文本類型的數(shù)據(jù),最好都加上編碼芝薇,目的是為了防止中文解析亂碼問(wèn)題
? + 通過(guò)網(wǎng)絡(luò)發(fā)送文件
? ? * 發(fā)送的并不是文件胚嘲,本質(zhì)上來(lái)講發(fā)送是文件的內(nèi)容
? ? * 當(dāng)瀏覽器收到服務(wù)器響應(yīng)內(nèi)容之后,就會(huì)根據(jù)你的 Content-Type 進(jìn)行對(duì)應(yīng)的解析處理
- 模塊系統(tǒng)
- Node 中的其它的核心模塊
- 做一個(gè)小管理系統(tǒng):
? + CRUD
- Express Web 開發(fā)框架
? + `npm install express`