-
我們知道在每個模塊中有一個導出對象為 exports
-
但其實 exports 是 module 對象中的其中一個成員
-
只是 Node.js 為了讓代碼看起來更為簡潔 統一設置了一個變量叫 exports 並讓 exprots 等於 module.exports
-
使得我們可以通過給 exprots 添加對象的同時也給 module.exports 添加對象
-
可實際上 在文件中導出的並不是 exports 而是 module.exports
-
所以我們如果要導出單個成員 沒辦法使用 exports = XXX 導出
- 這裏的 exports = XXX 只是給 exports 重新賦值 讓它不再等於 module.exports 而已
-
必須使用 module.exports = XXX 才能讓導出的對象直接變成 XXX 而不再是對象
-
這樣可以讓我們不需要再通過 require 到的成員訪問其中的對象(就是不需要再 require 點來點去 可以直接使用)
-
A. 所有文件默認會優先從緩存加載:
-
假設你有 a b c 三文件 你在 a 中 require b 和 c
-
在 b 中又 require c 那文件執行順序為
-
a > a 中的 b > b 中的 c > b > a > 獲取 c 的 exprots
-
當執行完 b 並且回到 a 的時候就不會再次執行 c 的代碼 但會獲取 c 導出的對象
-
因為在執行 b 時 c 就被執行過了 所以回到 a 時就不會再次執行裡面代碼了
-
-
B. 第三方模塊加載過程為:
-
到文件所屬目錄下找名為 node_modules 的資料夾
-
到此資料夾下找 require 的包名的資料夾
-
再到包名資料夾中找 package.json 文件
-
再到 json 文件中找 main 屬性對應的 js 文件
-
最後找到的那個 js 文件 即為最終引入這個第三方模塊所加載的對象
-
假設在尋找的過程中有找不到的 默認就會直接加載目錄下的 index.js 文件
-
如果連 index.js 文件都不存在 就會往目前所屬目錄的上一層目錄下重新按照此過程尋找
-
再沒有就再往上一層目錄下找 直到磁盤根目錄也沒有 就會直接報錯
-
-
-
C. 由於第二點的加載規則會不斷往外找 所以建議:
-
在每個項目中 直接於項目的根目錄中安裝第三方模塊 不要在每個子目錄中安裝
-
這樣才不會讓所有目錄下都充滿 node_modules 的資料夾 且造成重複安裝第三方模塊
-
-
npm 全名為 node package manager
-
是 Node.js 專門用來下載第三方包的
-
安裝 Node 就等同於安裝了 npm 了
-
常用命令為:
-
npm init
: 創建 package.json 文件,若有加上--yes
就會跳過嚮導 快速生成此文件。npm i -y
-
npm install
: 安裝所有 package.json 文件中dependencies
屬性的項目。npm i
-
npm install 包名
: 安裝包,若有加上--save
就會同時更新 package.json 文件。npm i XXX -s
-
npm uninstall 包名
: 刪除包,若有加上--save
就會同時更新 package.json 文件。npm un XXX -s
-
npm 命令 --help
: 查詢這個命令的使用幫助。
-
-
package.json 文件可通過在終端機中輸入
npm init
手動生成 -
裡面可填寫你的項目名稱、項目描述、啟動項目的 js 文件、項目依賴的第三方包等等
-
當你使用
npm
安裝第三方模塊時 加上--save
-
它就會自動產生
dependencies
屬性 保存你安裝的第三方模塊的包名及版本號
-
-
所以建議每個項目最好都有一個 package.json 文件 幫助我們保存項目依賴的訊息
-
這樣做的目的是 當你誤刪了 node_modules 資料夾時
-
可以通過在終端機中輸入
npm install
自動幫你安裝所有dependencies
屬性中的項目
-
-
Express 是一個第三方 Web 開發框架
-
因核心模塊 http 在開發方面有部分的不足 所以需要使用框架來加快我們開發項目
-
在 Express 中高度封裝了 node.js 中的 http 核心模塊 讓我們能更加專注在業務上而不是底層
-
Express 使用方式為:
-
建立項目資料夾
-
建立 package.json 文件
-
安裝 express
-
創建入口文件 app.js
-
打開 app.js 引入 express
-
定義一個變量
var app = express()
這句代碼就等同於核心模塊中的http.createServer()
方法 -
設定路徑
app.get('/',function(req,res){res.send('hello express!')})
-
app.get() 方法參數1 為 url 地址,參數2 為回調函數
-
express 中不再使用 res.write() 、 res.end() 而是直接使用 res.send()
-
express 已幫我們處理好中文亂碼的問題 響應中文時就不需要再設置請求頭了
-
express 也處理了沒有設置的 url 地址會直接返回 Cannot GET /XXX
-
在 express 中要處理靜態資源的方式也很簡單 一樣創建一個 public 目錄 把需要的資源存放進去
-
然後通過
app.use('/public/', express.static('./public/'))
公開靜態資源 -
在 express 中 可以通過
req.query
獲取 get 請求的參數 且直接就是對象
-
-