node.js基礎

什麼是Node.js?

  1. Node.js是一門後端語言
  2. 基於Chrome v8引擎的js運行環境
    除此以外:還有其餘的引擎: 單片機、actionscript
  3. Node.js有兩大特徵
  4. 事件驅動
  5. 事件的定義(發佈)
  6. 事件的觸發(訂閱)
  7. 非阻塞式 I/O 模型
  8. 非阻塞 : 執行一個任務時,不須要等待這個任務執行完成,就能夠去執行其餘任務
  9. I/O: 磁盤文件操做 / 數據庫數據操做
    總結:
    問題: 非阻塞,可是js是單線程,要想實現非阻塞,必須將任務放到任務隊列,任務隊列如何放?
    解決: js中異步操做
    問題: js中如何實現異步操做
    解決:
  10. 回調函數 √
  11. Promise
  12. gengator函數
  13. async函數
  14. Node.js自帶的 nextTick setImmediate
  15. 別人封裝的 async.js 庫

總結
優勢 :1. 高併發(最重要的優勢)
   2. 適合I/O密集型應用
缺點:javascript

  1. 不適合CPU密集型應用;CPU密集型應用給Node帶來的挑戰主要是:因爲JavaScript單線程的緣由,若是有長時間運行的計算(好比大循環),將會致使CPU時間片不能釋放,使得後續I/O沒法發起;

    解決方案:分解大型運算任務爲多個小任務,使得運算可以適時釋放,不阻塞I/O調用的發起;html

  2. 只支持單核CPU,不能充分利用CPUjava

  3. 可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰node

    緣由:單進程,單線程git

    解決方案:(1)Nnigx反向代理,負載均衡,開多個進程,綁定多個端口;github

         (2)開多個進程監聽同一個端口,使用cluster模塊;web

  4. 開源組件庫質量良莠不齊,更新快,向下不兼容數據庫

  5. Debug不方便,錯誤沒有stack tracenpm

Node.js的包管理器

NPM: 全球最大的開源生態系統( 國外的 )
cnpm 淘寶鏡像( 國內的 )
yarn 流行
npm && yarn 所有要配置國內鏡像 ( 百度關鍵字: yarn國內鏡像 )windows

Node.js的版本問題

  1. Node.js有兩個版本, 一個是測試版, 一個是穩定版,形成;兩個版本的緣由是: 有兩個團隊
  2. 業內規定:
  3. 版本的單數是: 測試版 bate版本
  4. 版本的偶數是: 穩定版

    Node.js 安裝

    安裝方式有兩種:
  5. 官網下載鏡像直接安裝 ( 只能使用一個版本 )
  6. 使用 nvm 來安裝 ( nvm能夠管理多個Node.js版本 )

    nvm有坑: nvm安裝有難度

  1. 要求: Node.js安裝最低版本也要8.9以上

    Node.js使用

  2. 命令終端使用
  3. 文件使用

    1. 命令終端

  • Node.js的全局對象是 global ; javascript的全局對象是 window
  • 直接在命令終端中輸入node,而後回車,就會出現 '>' 標識,而後就能夠寫js語法了
  • 命令終端退出: Ctrl + c 兩次

    2. 文件型使用

  • 命令行鍵盤 tab 鍵 自動補全文件名稱
  • 執行文件/運行文件:
    $ node 文件名稱.js
  • 自動監聽node.js文件/ 自動刷新工具
  • nodemon √
  • supervisor
  • 自動監聽工具的安裝
  • npm
    $ npm install nodemon -g
    $ npm install supervisor -g
  • cnpm
    $ cnpm install nodemon -g
    $ cnpm install supervisor -g
  • yarn
    $ yarn add nodemon global
    $ yarn add supervisor global

    Node.js服務器

    Node.js服務器有兩種
  1. web服務器( 靜態服務器 )
  2. api服務器( 動態服務器 ) 數據接口

    Node.js web服務器

1.引入模塊
var http = require('http');
var hostName = localhost;
var port = 8000;
2.建立http請求
http.createServer((req,res)=>{
3.想後臺發送數據

      /*設置頭部*/
     res.writeHead(200,{
         'content-type':'text/html;charset=utf8'
     })
     
     res.write('<h1> hello Node.js </h1>');
     res.end();
 4.監聽數據
}).listen(port,hostName,()=>{
     console.log(`
         this server is ruining in: http://${hostName}:${port}
     `)
})
相關文章
相關標籤/搜索