1. 程式人生 > >151.Node.js學習筆記(五)2018.12.16

151.Node.js學習筆記(五)2018.12.16

快捷鍵
Ctr+Shift+左鍵、右鍵、上鍵、下鍵 等於選中
Ctr+D 選中相鄰的單詞

0. 知識點

  • Express
  • MongoDB
  • 專案

1. 反饋

  • callback是不是相當於函式自呼叫?
    • 很簡單,函式也是一種資料型別,既可以當作引數進行傳遞,也可以當作方法的返回值
      在這裡插入圖片描述
      注意:a是形參、ret是實參
  • 我們現在用的模組化是CMD吧 ?能不能擴充套件一下AMD?

    • PHP 中為什麼就可以直接 require、include ?因為 PHP 當初在設計的時候就加入了這個功能
    • PHP 這門語言天生就支援
    • 模組作用域
    • 可以使用 API 來進行檔案與檔案之間的依賴載入
    • 在 Node 這個環境中對 JavaScript 進行了特殊的模組化支援 CommonJS
    • JavaScript 天生不支援模組化
      • require
      • exports
      • Node.js 才有的
    • 在瀏覽器中也可以像在 Node 中的模組一樣來進行程式設計
      • script標籤來引用載入,而且你還必須考慮載入的順序問題
      • require.js 第三方庫 AMD
      • sea.js 第三方庫 CMD
    • 無論是 CommonJS、AMD、CMD、UMD、EcmaScript 6 Modules 官方規範
      • 都是為了解決 JavaScript 的模組化問題
      • CommonJS、AMD、CMD 都是民間搞出來的
      • EcmaScript 是官方規範定義
      • 官方看民間都在亂搞,開發人員為了在不同的環境使用不同的 JavaScript 模組化解決方案
      • 所以 EcmaScript 在 2015 年釋出了 EcmaScript 2016 官方標準
      • 其中就包含了官方對 JavaScript 模組化的支援
      • 也就是說語言天生就支援了
      • 但是雖然標準已經發布了,但是很多 JavaScript 執行換將還不支援
      • Node 也是隻在 8.5 版本之後才對 EcmaScript 6 module 進行了支援
      • 後面學 Vue 的時候會去學習
      • less 編譯器 > css
      • EcmaScript 6 -> 編譯器 -> EcmaScript 5
      • 目前的前端情況都是使用很多新技術,然後利用編譯器工具打包可以在低版本瀏覽器執行。
      • 使用新技術的目的就是為了提高效率,增加可維護性
  • var router = require(’./router’) 這一步不是載入router.js並執行該檔案嗎 為什麼還要執行app.use(router) app.use 不是開放靜態資源嗎 app.use(router)在這裡是什麼意思,掛載到 app 服務中的意思是? module.exports = app 也不懂

    • 這裡涉及到一箇中間件的概念
    • app.use 不僅僅是用來處理靜態資源的
    • 還可以做很多工作
    • 配置 body-parse 也是通過 app.use 來配置的
    • 這叫中介軟體,其中有一套規則
  • npm init --yes 生成一個package.json 檔案 npm --save 檔名 又生成一個package-lock.json檔案,又生成的檔案和初始化生成的檔案有區別嗎?

    • 當你安裝包的時候,新版的 npm 還會自動生成一個檔案:package-lock.json
  • 為什麼模板引擎在app.js中引入之後在router.js中不引入可以直接使用,而express還需要在router.js中再引入一次 app.js中路由器掛載不是很懂 router.js中為什麼要建立一個路由器容器,不知道作用是幹什麼的 es6中的find方法不是很懂

    • 中介軟體
    • ECMAScript 6 的 find 方法