先回顧一下我們前端的主要工作:
1、寫頁面 --- HTML
2低零、美化頁面 ----- CSS
3壶谒、調(diào)用后臺(tái)接口API去請(qǐng)求數(shù)據(jù)或 提交數(shù)據(jù) ----- JS
例如:
前端核心之一技能:Ajax --> XHR、JQuery础米、$.agax()分苇、$.get、$.post
其中 JQuery 更多的是操作 DOM 方面的屁桑。
4医寿、HTML5 和 CSS3 新語法、新特效
例如:
動(dòng)畫蘑斧、移動(dòng)web的屏幕適配(媒體查詢)
5靖秩、Angular ---- 單頁面應(yīng)用程序
6、Vue ---- 基于Node
7竖瘾、微信小程序 --- 官網(wǎng)
8沟突、React Native --- ios、Android 混合開發(fā)
准浴。事扭。。
后端主要工作:
1乐横、主要進(jìn)行業(yè)務(wù)邏輯的操作
2、例如: 數(shù)據(jù)的增加今野、刪除葡公、修改、查詢条霜、操作數(shù)據(jù)庫
3催什、對(duì)外暴露API 接口 ---- (API后臺(tái)的靈魂)
前端(PC、IOS宰睡、Android等)和 后端 的協(xié)作流程蒲凶?
同時(shí)進(jìn)行開發(fā):
1、前端寫頁面拆内,調(diào)用后臺(tái)的接口旋圆;(調(diào)用API)
2、后臺(tái)接受前端發(fā)送過來的請(qǐng)求麸恍,進(jìn)行業(yè)務(wù)處理灵巧,處理結(jié)果返回給前端。(提供API)
1抹沪、學(xué)習(xí)Node首先要學(xué)習(xí)如何使用 npm 包管理器
區(qū)別 NPM刻肄、Github、Git
- npm包管理器 和iOS 的 CocoaPods 很相似融欧,里面托管了各種各樣的包敏弃,主要是方便管理和維護(hù)。
- Github噪馏、碼云 代碼托管平臺(tái)(托管了各種各樣的代碼倉庫)
- Git是用來對(duì)代碼進(jìn)行分支版本管理
安裝包
第一次使用 先初始化(在當(dāng)前文件打開終端) npm init -y 麦到,你會(huì)看到工程里有個(gè) package.json虹茶,將來所有安裝的包,都會(huì)記錄到這個(gè)文件中
使用 npm install 包名 --save/--save-dev 去安裝包隅要;其中蝴罪,install 可以簡(jiǎn)寫成 i ;
--save 表示把包安裝到部署依賴中(在開發(fā)和部署上線都需要使用的包)--save可以簡(jiǎn)寫成 -S,
save-dev 表示安裝到開發(fā)依賴(只在項(xiàng)目開發(fā)階段需要用到的包)--save-dev可以簡(jiǎn)寫成 -D;npm i 包名 -g ,其中,-g 表示全局安裝某些包步清,通過-g安裝的包都在C:\Users\用戶名\AppData\Roaming\npm下面
卸載包
- npm uninstall 包名 --save/--save-dev或者npm remove 包名 --save/--save-dev
yarn
- yarn和npm的作用完全一樣要门,都是用來管理項(xiàng)目中的第三方依賴包的!
- yarn是Facebook公司推出來的一套包管理工具廓啊!
【React欢搜,尤其是ReactNative,默認(rèn)就是用Yarn去裝包的】
- yarn會(huì)緩存曾經(jīng)安裝過的包谴轮;但是npm也會(huì)緩存炒瘟,但是效果不如yarn明顯;
學(xué)習(xí)當(dāng)然離不開 nodejs文檔.
Node它是什么第步?
Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境疮装。
Node.js 使用了一個(gè)事件驅(qū)動(dòng)、非阻塞式 I/O 的模型粘都,使其輕量又高效廓推。
Node.js 的包管理器 npm,是全球最大的開源庫生態(tài)系統(tǒng)翩隧。
Node可以做什么樊展?
- node屬性中后端。
- Node可以作為前端的一個(gè)工具去使用堆生,通過NPM安裝好用的工具专缠;Node可以開發(fā)一些前端的工具【i5ting_toc】
- Node能做服務(wù)器
- Node還可以操作數(shù)據(jù)庫并對(duì)外提供數(shù)據(jù)接口
- Node能做即時(shí)聊天(到時(shí)會(huì)分享怎么做!J缙汀@酝瘛)
總結(jié):Node.js 就是一個(gè)Javascript的服務(wù)端運(yùn)行環(huán)境(依賴于Chrome 的V8引擎),為Javascript提供了服務(wù)器端編程的能力糯景!
怎么運(yùn)行第一文件嘁圈?
- 直接在命令行中輸入 node 空格文件名,回車蟀淮。
下面是講解 常用的模塊化
模塊化
概念:
把一些功能類似的代碼最住,封裝到一個(gè)單獨(dú)的文件中去,這些單獨(dú)抽離出來的代碼文件怠惶,就能夠提供各種各樣好用的功能涨缚;這種通過代碼功能分割文件的方式,叫做程序中的模塊化。
- 個(gè)人認(rèn)為模塊化這是它的亮點(diǎn)之一(高性能脓魏、異步操作等都是哈兰吟!)。
- Node的模塊化好處是:
- 一個(gè) js 文件就是一個(gè)功能模塊茂翔;保證了每個(gè)文件的功能(職能)單一混蔼;
- 需要什么特定的功能,直接調(diào)用某一個(gè)特定的模塊珊燎;
怎么模塊化惭嚣?
- request: Node要求使用內(nèi)置或第三方的模塊時(shí),要引用 request('xxxxx')
- module: 它就是一個(gè)模塊悔政。(node里一個(gè)js 文件就是一個(gè)模塊M硗獭!D惫)
- exports: 在Node的模塊中槽地,如果這個(gè)模塊需要向外暴露一些成員,供其他JS模塊使用??? 怎么辦芦瘾?捌蚊?? ----- 使用 exports.暴露的成員
exports 和 module.exports 的區(qū)別
- 通過 module.exports 可以使用 " . " 點(diǎn) 的形式追加屬性旅急,也可以使用 " = "等號(hào) 直接賦值的形式導(dǎo)出成員逢勾;
- exports 只能通過 " . " 點(diǎn)的形式追加屬性;不能 使用 “=”等號(hào) 直接賦值的形式藐吮!
注意:
在一個(gè) module 中,最終向外暴露的成員逃贝,以 module.exports 指向的對(duì)象為準(zhǔn)谣辞!
模塊加載規(guī)則
- 優(yōu)先從緩存中加載
- 加載核心模塊:優(yōu)先從緩存中加載;如果緩存中沒有的話沐扳,再去執(zhí)行加載核心模塊泥从!
- 自己的模塊:優(yōu)先從緩存中加載;如果緩存中沒有的話沪摄,再去執(zhí)行加載用戶模塊躯嫉!
用戶模塊的查找規(guī)則:
如果不寫后綴名,則先嚴(yán)格按照給定的文件名去查找模塊并加載執(zhí)行杨拐;
index -> index.js -> index.json -> index.node
模塊化
- node中的模塊化基于commonJS:最顯著的特點(diǎn)所有依賴項(xiàng)都是同步加載的F聿汀!哄陶!
- commonJS由于是一個(gè)同步加載規(guī)范帆阳,所以不適合瀏覽器端使用;于是屋吨,瀏覽器端需要使用異步的模塊加載機(jī)制
由于 node是具有中后臺(tái)的能力蜒谤,所以后臺(tái)就經(jīng)常使用到文件操作:(異步的山宾,注意坑!)
解決異步的坑:
1鳍徽、嵌套 2资锰、創(chuàng)建一個(gè)計(jì)數(shù)器count,然后判斷是否加載完畢 3阶祭、promise
// forEach 的使用
data.forEach((value, index) => {}
1绷杜、node常見的文件操作
fs.Stats 對(duì)象提供了一個(gè)文件的信息。
- fs.readFile
- fs.writeFile
- fs.appendFile
...
寫出一個(gè)類似于 Apache 服務(wù)器的服務(wù)胖翰?(4步)
var http = require('http') // 引入 require(‘http’)
var server = http.createServer() // 創(chuàng)建 服務(wù)
server.listen('3000', () => { // 鏈接 listen
console.log('http://127.0.0.1:3000')
})
server.on('request', (req, res) => { // 請(qǐng)求
}
2接剩、node怎么使用art-template 模板的使用?
- 服務(wù)端渲染和客戶端渲染的對(duì)比
博客園官網(wǎng)
引入 art-template
var template = require('art-template')
創(chuàng)建服務(wù)器(上面步驟)-
和之前使用的渲染顯示到頁面的方式一樣:
// 顯示 {list:allArr} 數(shù)組要轉(zhuǎn)對(duì)象(模板都是對(duì)象) if (count == data.length) { var html = template(__dirname + "/datas/list.html", {list: allArr}) res.end(html) // res: response end(): 表示輸出值或渲染 }
注意:nodejs res.end和res.send 區(qū)別
簡(jiǎn)單來說就是 如果服務(wù)器端沒有數(shù)據(jù)返回到客戶端 那么就可以用 res.end
但是 如果 服務(wù)器端有數(shù)據(jù)返回到客戶端 這個(gè)時(shí)候必須用res.send ,不能用 res.end(會(huì)報(bào)錯(cuò))
待更新萨咳。懊缺。。