什么是node.js
node.js是一個基于Chrome V8引擎的JavaScript運行環(huán)境
node.js使用事件驅(qū)動,非阻塞IO的模型,使其輕量又高效
node.js適用于:1.RESTful API 2.統(tǒng)一web應(yīng)用的UI層 3.大量Ajax請求的應(yīng)用
node.js特點:
1.他是一個JavaScript運行環(huán)境
2.依賴于Chrome V8引擎進行代碼解釋
3.事件驅(qū)動
4.非阻塞I/O
5.輕量肯污,可伸縮
6.單進程,單線程
node.js優(yōu)點:
1.高并發(fā)
2.適合I/O密集型應(yīng)用
? ? ? ? ? 缺點:
1.不適合CPU密集型應(yīng)用
2.只支持單核CPU,不能充分利用CPU
3.可靠性低渐裂,一旦代碼某個環(huán)節(jié)崩潰,整個系統(tǒng)都會崩潰
原因:單進程钠惩,單線程
解決辦法:1.Nnigx反向代理柒凉,負(fù)載均衡,開多個進程篓跛,綁定多個端口
2.開多個進程同時監(jiān)聽多個端口膝捞,使用cluster模塊
4.開源組件庫質(zhì)量參差不齊,更新快愧沟,向下不兼容
5.Debug不方便蔬咬,錯誤沒有stack trace
node.js與JavaScript區(qū)別鲤遥?
node.js
node.js主模塊:整個項目的啟動模塊,其他子模塊都?xì)w主模塊調(diào)用林艘,通常命名為mian.js? 或index.js 以及app.js
模塊就是一個文件盖奈,所有用戶編寫的代碼都放在文件中
模塊組成:exports 暴露對象,可以將模塊中的數(shù)據(jù)暴露給引用的地方
require 引入模塊的函數(shù)北启,用于在一個模塊中引入另外一個模塊
module 模塊對象卜朗,包含了當(dāng)前模塊的所有信息
_filename 當(dāng)前模塊的文件名
_dirname 當(dāng)前模塊所在的路徑
通過arguments可以查看函數(shù)
中間件:是一個函數(shù),位于路由和客戶端之間咕村,可以訪問請求對象和響應(yīng)對象场钉,也可以調(diào)起下一個中間件
exports 和 module.exports的區(qū)別
module.exports才是真正的接口,而exports只不過是module.exports的一個輔助工具懈涛,exports是基于module.exports而實現(xiàn)的逛万,
實際上由exports獲取的屬性和方法,最后全都賦給module.exports接口批钠,不過前提是module.exports本身并不具備任何屬性和方法宇植;