




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【node.js】知識點總結不會就問就查詢!科技利民,學海?涯2!?、概念Node.js不是語?、不是庫、不是框架;的運?環境,可以解析、執?JavaScript代碼;使JavaScript可以脫離瀏覽器來運?;?、組成部分、瀏覽器中JavaScript:ECMAScriptDOMBOM2、Node.js中JavaScript:ECMAScript沒有DOM、BOM為JavaScript提供了?些服務器級別的操作API:?件讀寫?絡服務的構建?絡通信http服務器等。。。三、特點事件驅動?阻塞IO模型(異步)輕量和?效構建于chrome的V8引擎之上四、?途web命令??具B/S編程模型模塊化編程Node常?API異步編程Express開發框架Ecmascript6六、安裝使?:穩定版(LTS)、最新體驗版(Current);(重復下載會升級覆蓋)命令?檢查:node--version/node-v;對應?錄下執?js腳本?件:nodeaa.js創建JavaScript腳本?件,不要使?node.js打開命令??具定位到?件執?js?件讀寫?件:fs模塊(file-system?件系統:提供所有?件操作API)引?模塊:varfs=require('fs')fs.readFile(',function(error,data)if(error)console.log('elseconsole.log(data)},讀取成功:(data:所讀數據;error:null)讀取失敗:(data:null;error:錯誤對象(直接展?給?戶不友好))默認返回?進制數據(以?六進制顯?),使?toString();例如:fs.readFile('./hello.txt',function(error,data){console.log(data.toString())})寫?件:fs.writeFile('?件路徑',‘?件內容’,回調函數function(error){})寫?成功:error:null,寫?失?。篹rror:錯誤對象刪除、創建?件等。。。http服務:http模塊請求、響應都在實例的on?法的回調函數中;請求:主要?于告訴服務器,客戶端傳的是什么路徑;req.url響應:?于針對不同路徑做對應響應,只能傳字符串或?進制(讀取?件時的數據就是?進制),所以其他數據需要轉成字符串/?進制;?式?:res.write([響應內容]);res.end();?式?:直接res.end([響應內容]);響應內容:必須是字符串(通過編碼規則轉成?進制)或?進制,因為在前后端不同語?間傳輸的數據是以JSON字符串形式;JSON.stringify();轉成json字符串(序列化:?于傳輸);varvarhttp=require('http')varserver=http.createServer()//返回?個實例server.on('request',function(request,response){console.log('當前訪問的路徑是'+request.url)/l`/`varurl=req.url;if(url=='/'){response.end('hello?頁');//中?會有亂碼,要配置響應內容類型}else{response.setHeader('Content-Type','text/plain;charset=utf-8');tf-8;response.write('hello其他');//中?會有亂碼,要配置響應內容類型response.end();}/)})//監聽客戶端打開?址,服務器收到請求時回調server.listen(3000,function(){console.log('服務器啟動成功了,可以通過:3000/來進?訪問!')})//當服務啟動后回調,80端?時客戶端不需要輸端?;七、Node中的JavaScriptEcmaScript內置的具名的:var[模塊名]=require('[模塊名]');常?:fs,http,os,path,第三?模塊:Expressweb開發框架,需要下載引?;?戶?定義模塊:就是常說的模塊化編程,引?js?件;Node中沒有全局作?域,只有模塊作?域,即引?的不同js?件,不能互相訪問內部變量;所以要在js?件內使?exports對象導出內部變量、?法;引?時可以不寫后綴.js;但必須寫相對路徑./,../,否則會被認為是核?模塊,報錯!?、服務器端的ip與端?號IP:ip地址?來定位計算機;;(因為?臺計算機有多個應?程序,靠IP地址?法區分通訊)客戶端中瀏覽器等應?程序會默認找?個空閑端?來與服務器通信;?些指定端?號與指定服務聯系,不會被默認使?;80,?戶就不?寫了;3000端?號,?般在開發測試時?;問題原因:服務器默認發送的json字符串數據(讀取?件時?件內容編碼成的?進制所采?的規則由?件創建時的編碼環境決定,?般?開發?具創建的?件都是utf-8)就是utf-8問題原因:服務器默認發送的json字符串數據(讀取?件時?件內容編碼成的?進制所采?的規則由?件創建時的編碼環境決定,?般?開發?具創建的?件都是utf-8)就是utf-8編碼,但是瀏覽器默認不知道是什么編碼,會按當前操作系統默認的編碼格式,如:中?操作系統的默認編碼規則:GBK,兩者規則不同導致中?亂碼。html?件前部分字母是都很正常,GBK正常解碼?進制數據,識別看到metaUTF-8,所以在傳html?件時要聲明類型和編碼規則,元數據meta中定義的編碼格式等同于在服務器端響應編碼格式)解決?案:聲明響應數據的類型(普通?本解決?案:聲明響應數據的類型(普通?本text/plain、html代碼text/html等),并告訴瀏覽器編碼格式charset=utf-8;不管以字符串形式還是?進制傳的都可以視情況需要在服務器設置響應數據類型:提供數據類型和編碼格式給瀏覽器發送的數據與對應響應類型:圖?需要指定響應類型,但不需要指定編碼格式;?般只為字符數據(中?、字母、數字、符號等)指定編碼格式utf-8;如:res.setHeader('Content-Type','text/plain;charsetutf-8')如:res.setHeader('Content-Type','text/html;charsetutf-8')特別地:對于響應讀取html?件的內容時,可以不寫上述聲明是因為瀏覽器?動識別html代碼,并且html代碼中meta元數據也可以聲明編碼格式。?、代碼書寫風格與分號的使?常見代碼書寫風格規范:?般推薦不加分號,必須加分號的情況:以模板字符串``開頭的代碼前加;;();[]??、node.js實現Apache功能1、實現瀏覽器輸?域名+端?號/?件名,就顯?服務器上指定?件對應的內容;利?if語句判斷?戶輸?的路徑;利?fs模塊,針對不同路徑找到對應?件并讀取內容(可以直接響應,因為fs.readFile()默認返回的data就是?進制(以?六進制顯?),如果要對data進?處理可以toString()轉為字符串);2、實現在瀏覽器顯??件?錄功能;利?http核?模塊創建服務;利?fs.readdir(path[,options],callback)核?模塊讀取?件?錄信息,返回數組形式,?于模板引擎替換?錄數據;怎么替換?:要使?模板引擎內置?法:{{each[數組名]}}<p>數組中的{{$value}}</p>{{/each}},遍歷數組中每?項從??產每?項利?fs.readFile(path[,options],callback)核?模塊讀取?于?錄顯?的html模板?件并結合模板引擎如:art-template第三?模塊替換?錄內容(所以要data.toString()將?進制先轉為字符串,當做替換模板使?);重點:怎么判斷?錄是?件夾還是?件?也有模塊可以實現;最終將改好的字符串響應給瀏覽器res.end(newData),實現在瀏覽器顯??錄、點擊?錄。補充:第三?art-template補充:第三?art-template模板引擎規則是識別字符串內{{}}中的變量名;(可在前端html頁?中使?,也可以在后端node中安裝使?)補充:在Node中使??式:vartemplate=require('art-tmplate')varret=template.render(data.toString(),{name:'jack'})/??、客戶端渲染與服務端渲染渲染:就是將數據以html元素這種瀏覽器可以識別的?式顯?;客戶端渲染:采?ajax等異步操作請求數據,速度更快;但不利于SEO,爬?抓不到異步數據(在源代碼中看不到數據:如京東商品的評論區分頁功能);服務端渲染:直接傳過來帶數據的html頁?,爬?在源代碼中能找到數據,有利于SEO;(在?頁源代碼中可以看到數據,如京東商品展?功能)所以?般?站前后端渲染都會?到,為了更快、也為了SEO。背景:當我們在html頁?中使?背景:當我們在html頁?中使?link、script、img、iframe、video、audio等需要再次發請求引?靜態資源的標簽時,其實就是?動?向服務器發了?次請求(請求路徑分為:?絡路徑、url?件路徑會拼接在服務器地址后?;),所以服務器端也會對這些請求做響應。(如果沒有響應,瀏覽器就會?直處于等待狀態,沒法渲染頁?)處理?式:處理?式:服務器將靜態資源統?放到?個?件夾public中,然后在html頁?中通過?件路徑引?,這樣可以通過req.url判斷只要是以/public/開頭的就直接把這個url當做?件路徑去找這個?件,然后響應回去;所以html頁?中使?的路徑要是?件路徑。?四、服務器對表單提交的處理傳統req.url返回的是整個根?錄及以后的部分;包含了路徑和query信息;require('url')當客戶端使?get請求時,服務器要想得到query數據,單從req.url中不容易獲取,所以有了專門處理路徑的核?模塊:varurl=require('url');使?這個模塊的parse?法可以得到?個路徑對象;varpathObj=url.parse(req.url,true);第?個參數?于將query的屬性值以對象形式呈現,默認是字符串,這?會涉及編碼格式;pathObj.pathname路徑字符串來決定響應內容;varpathObj=url.parse(req.url,true)并向模板中使?上pathObj.query對象;?如,添加到已有數組中,并使?重定向讓頁?刷新;res.statusCode=302res.setHeader('Location','/')res.end()重定向:響應設置302狀態碼(臨時重定向,再次發請求,瀏覽器不記住重定向后的地址,相當于每次都是第?次,還是會向原?址發請求),瀏覽器收到這個狀態碼,就直接去響應頭中找Location;在響應頭中設置Location告訴瀏覽器重定向的路徑;res.statusCode=302res.setHeader('Location','/')res.end()但是這?步不是數據持久化,服務器?重啟新加的數據會沒有。?四、Node.js的測試?法瀏覽器中有F12調試?具node中也有調試?具:>node命令?直接輸命令,可以直接?node中API,按ctrl+c+c退出。模塊分類:核?模塊模塊分類:核?模塊1、Node.js中的模塊化基于Commen.JS;導出的是:module.exports對象;內部默認varmodule.exports={};varexports=module.exports;returnmodule.exports所以想導出什么,往對象中添加,?般導出單個?:module.exports=;導出多個?:exports.屬性名=或module.exports={}2、require加載規則優先從緩存加載;緩存有的就不執?內部代碼,?是返回對象module.exports;require('fs'):引?核?模塊require('fs')require('./aa.js'):引??定義模塊(路徑?式)require('art-template'):引?第三?模塊核?模塊、第三?模塊的加載:在node_module?件下的同名?件中找package.json中的main屬性對應的值,如index.js,然后去這個?件并執?;如果main沒有,那默認找index.js;本?件夾沒有則往外找package.json、index.js,直到找到根?錄。3、package.json會?動記錄同?件中npm下載時帶--save、--save-dev的第三?模塊;不帶不記錄;4、使?npminit會?動?成package.json?件;5、使?npminstall會?動根據package.json中記錄下載包;?于拷貝項?時下載包。6、7、解決npm被墻問題(國外?站訪問慢):使?nrm源管理器;可以?npm命令,但是源變了;下載指定源:npminstall--globalcnpm;這是可以?新源:cnpminit;cnpm是淘寶鏡像,每10分鐘從npm中更新?次包數據。配置npm以指定源,npmconfiglist查看:npmconfigsetregistry;這樣還是npm命令,源變了;?六、Node.js的第三?模塊:Express1、輕便的web服務器開發框架;(封裝的http核?模塊)2、安裝npminstallexpress--save3、訪問路徑:公開指定?錄:app.use('/public/',express.static('./public/'));?戶可以輸?以/public/開頭的路徑;指定單個?錄(路由):app.get('/',function(req,res){});?戶訪問根?錄時的情況;express404頁?。4、在expressres響應?法會?動結束,不?res.end()?七、Node.js的路徑問題1、fs?件操作中?件路徑的相對路徑中./可以省略;2、require模塊加載時的相對路徑中./不能省,省略就是加載核?模塊/第三?模塊;3、相對路徑含義:./aa.jsaa.js/aa.js:當前磁盤根?錄中../aa.js:上?級?錄中4、c:/aa.js:(絕對路徑)c盤根?錄中??、Node.js的服務?動重啟nodemon:?于修改代碼保存后?動重啟服務器;nodemonnodeinstall--globalnodemomnodemonaa.jsnodeinstall--globalnodemomnodemonaa.js?九、express的靜態資源服務1、通過路由匹配訪問指定資源:app.get('/',function(req,res){})、app.post('/',function(req,res){})2、通過公開指定?錄訪問?錄內?件:app.use('/public/',express.static('./public/')):以/public/為根?錄開頭的路徑,后?的部分會去相應?件中找,并以正確編碼顯?;app.use(express.static('./public/')):只要路由中沒有定義的,會直接截取根?錄/后?部分,去./public/?件夾內部中找,找到就顯?;app.use(express.static('./public/'))3、使?模板引擎模塊art-template安裝:npminstall--saveart-templateexpress-art-template配置:識別.art結尾的?件,并使?模板引擎;可以在app.engine中更改設置;varexpress=require(‘express’)varapp=express()app.engine('art',require('express-art-template'))//可改后綴名app.engine('art',require('express-art-template'))app.set('views',path.join(dirname,'./views/'))//更改默認的views查找?錄使?:內部設置?動去同?錄下的views?件夾中查找這個模板?件(res.render('index.art')不傳對象參數就是直接傳頁?信息);app.get('/',function(req,resres.render('index.art',{user:name:'aaa //res.redirect('/')4、獲取請求數據get?法:req.query//就是對象形式post?法:借助第三?模塊body-parser,res.body也是對象形式;??、使?express實現增刪改查數據(CreateUpdateReadDelete)1、CURD起步新建?件夾npminit,初始化package.json安裝第三?模塊express、art-template、express-art-template配置、使?模塊,創建服務器?件;2、以.json?件為數據存儲?式,對?件數據進?CURD利?fs核?模塊,讀取?件數據;將?進制數據toString()轉為json字符串(或者fs.readFile('./aa.json','utf8',function(err,data){}));將json字符串JSON.parse(data)轉為json對象;最后使?內部屬性JSON.parse(data).students,?來做模板引擎數據;3、配置服務器端路由:router.js使?express中的router,varrouter=express.Router()–router.js加載路由,app.use(router)–app.js4、創建操作頁?5、封裝對學?數據的操作:students.js利?ID獲取數據和保存編輯時注意:利?ID獲取數據和保存編輯時注意:通過req.query、req.body獲取的提交數據是對象形式,但對象中屬性值都是字符串類型(所以id屬性也是),需要轉變student.id=parseInt(student.id);通過JSON.parse(data)將json?件中字符串轉為對象形式時,內部屬性值原本是什么類型還不變;刪除前彈框確認:node環境中沒有confirm,所以在模板頁?中判斷;<ahref="/students/delete?id={{$value.id}}"onclick="if(confirm('確定刪除?')==false)returnfalse;">刪除</a>編輯頁?男?性別選中的判斷:<<script>window.onload=function(){if("{{student.gender}}"==0){//express-art-template模塊的語法document.getElementsByName('gender')[0].checked='checked';}else{document.getElementsByName('gender')[1].checked='checked';}}</script>Array.Atotype.find=function(Func){for(vari=0;i<this.length;i++){if(Func(this[i],i)){returnthis[i]//i;返回‘i’,就是findIndex?法}}}find:varvarid='1'varstu=students.find(function(item,index){returnitem.id==parseInt(id)})findIndex:varvarid=1vardelId=students.findIndex(function(item,index){returnitem.id==parseInt(id)})?于得到?個函數內部異步操作的結果,在異步函數內部調?執?;7、異步編程–回調函數?于得到?個函數內部異步操作的結果,在異步函數內部調?執?;常見異步操作:setTimeout、readFile、writeFile、數;使??式:正常函數–>傳參數:–>正常函數中使?異步操作–>在異步操作中調?這個回調函數–>并將異步操作的值傳給這個回調函數作參數;functionfunctionadd(x,y,callback){//varx=10//vary=20//varcallback=function(sum){...}setTimout(function(){varsum=x+ycallback(sum)},1000)}add(10,20,function(sum){returnsum}),???、JavaScript模塊化及其他補充node.js中模塊化:借助CommonJSEcmaScript6中:?帶的模塊化規范(官?規范)瀏覽器中模塊化:借助第三?庫require.js:也稱為AMD規范sea.js:也稱為CMD規范EcmaScript6:通過編譯器?具打包–EcmaScript5;以防?瀏覽器不?持;新技術的?的是為了提?效率,增加可維護性,可以利?編譯器?具
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 纖維生產項目管理與成本控制考核試卷
- 派遣工績效考核考核試卷
- 毛皮制品加工安全生產培訓考核試卷
- 內蒙古包頭市第二中學2025年初三下學期2月份月考生物試題含解析
- 網絡安全技術實踐教程(微課版)-教案 Linux操作系統安全加固
- 山東體育學院《學前教育研究方法與應用》2023-2024學年第二學期期末試卷
- 十堰市鄖縣2025屆五年級數學第二學期期末聯考模擬試題含答案
- 山西工商學院《中國文化英語教程》2023-2024學年第一學期期末試卷
- 寧夏石嘴山市名校2025屆初三第一次模擬(期末)考試生物試題試卷含解析
- 江西省鷹潭市貴溪市2024-2025學年初三下學期回頭考試數學試題含解析
- 內蒙古自治區部分學校2024-2025學年高三下學期二模地理試題(原卷版+解析版)
- 教研項目合同協議
- JJF 2231-2025感應式磁傳感器校準規范
- 云南省昆明地區2025屆小升初模擬數學測試卷含解析
- 委托設計框架合同協議
- 風險化學品事故應急預案
- 第3課 中華文明的起源(教學設計)七年級歷史上冊同步高效課堂(統編版2024)
- 【浙江卷地理試題+答案】浙江省高考科目考試2025年4月紹興市適應性試卷(紹興二模)
- 2024年高校輔導員筆試重點試題及答案
- 農藝師行業標準與職業道德探討試題及答案
- 人工智能在情緒調節與積極心理學中的應用-全面剖析
評論
0/150
提交評論