Fifth Week:Node.js学习
一 概述
簡單來說就是運行在服務器端的JavaScript,事件驅動I/O,基于Google的V8引擎。
(1)非阻塞式IO 、IO多路復用
阻塞式IO是指建立了socket后,未得到響應之前什么也不能做。非阻塞式是指為了得到某些數(shù)據(jù),可以通過定時詢問的方式獲取。
IO多路復用是指fork子進程或者創(chuàng)建線程來等待數(shù)據(jù)。
(2)libuv
事件輪訓機制:每個句柄中存儲數(shù)據(jù)和回調(diào)函數(shù)之類的信息,句柄在使用前添加到對應的隊列或者堆(只有定時器句柄使用最小堆)中。libuv在進行每一次事件輪詢的時候都會從每個類型的句柄中,取出關聯(lián)的隊列或者堆結構進行處理
nodejs最擅長處理高并發(fā),
在java、php、.net等服務端語音中,會為每一個客戶端連接創(chuàng)建一個新的線程,每一個線程占大約2MB的內(nèi)存。也就是說,理論上一個8GB的服務器最多可以連接4000個左右的用戶。如果想要讓Web應用程序支持連接更多的用戶,就要增加服務器的數(shù)量。
nodejs不為每一個客戶連接創(chuàng)建一個新的線程,而僅僅使用一個線程。當有客戶連接了,就觸發(fā)一個內(nèi)部事件,通過非阻塞式IO、事件驅動機制,讓nodejs程序宏觀上也是并行的,因此一個8GB的服務器,可以同時處理超過4萬用戶的連接
搭建環(huán)境
1、下載nodejs 最好是穩(wěn)定版本LTS
Node -v 驗證是否安裝成功
2、開發(fā)工具vscode
使用pycharm
安裝nodejs插件即可
一、http模塊、url模塊和supervisor模塊
使用nodejs時,不僅僅實現(xiàn)了一個應用,同時實現(xiàn)了整個http服務器
//引入http模塊
Var http=require(‘http’);
/*
創(chuàng)建一個http服務器
request表示獲取url傳過來的信息
response給瀏覽器響應信息
*/
http.createServer(function(request,response){
//設置響應頭
response.writeHead(200,{‘Content-Type’:‘text/plain’});
//給頁面上面輸出一句話并且結束響應
response.end(‘HelloWorld112’);
}).listen(8081);//監(jiān)聽端口
console.log(‘Serverrunningathttp://127.0.0.1:8081/’);
URL模塊的使用
Url.parse() 解析url
Url.format(urlObject) 上面parse操作的逆向操作
Url.resolve(from,to) 添加或者替換地址
supervisor自啟動工具
設置環(huán)境變量
安裝supervisor npm install -g supervisor
使用supervisor替代node啟動應用
二、模塊commonjs
commonJS就是模塊化的標準,nodejs就是commonJS的實現(xiàn)
node中模塊分成兩部分
1、核心模塊,由node提供(系統(tǒng)模塊)如http模塊,url模塊、fs模塊,這部分核心模塊在程序啟動時直接被加載到內(nèi)存中
2、文件模塊,用戶編寫的模塊(自定義模塊),在運行中動態(tài)加載,需要完整的路徑分析、文件定位、編譯執(zhí)行過程,這些模塊需要我們自行定義
2.2 自定義模塊
(1)公共的功能抽離成一個單獨的js文件作為一個模塊,模塊里功能默認外面無法訪問,需要在模塊里設置exports或者module.exports暴露屬性或者方法
(2)外部通過require的方法引入這個模塊
Npm init 生成package.json
Npm init --yes
三、fs模塊、Mkdirp 第三方庫的使用
1. Fs.stat 判斷是文件還是目錄 2. Fs.mkdir 創(chuàng)建目錄 3. Fs.writeFile 若文件不存在,創(chuàng)建寫入數(shù)據(jù);若文件存在,覆蓋內(nèi)容 4. Fs.appendFile 5. Fs.readFile 6. Fs.readdir 7. Fs.rename 8. Fs.rmdir 9. Fs.unlink四、數(shù)據(jù)類型
1、常量 使用大寫字母和變量聲明
Var SECONDS_PER_DAY = 86400;
2、Number 所有數(shù)字都是64位雙精度浮點數(shù)
注意:除0時不產(chǎn)生異常,返回Infinity或-Infinity
測試是否有效的有限數(shù)使用isFinite函數(shù) eg:console.log(isFinite(10/5));
3、 true/false
False:false,0,"",NaN,undefined都將計算為false,其他為true
布爾運算:&& || !
4、字符串
length屬性 – 獲取字符串長度
拼接 +
其他函數(shù):indexOf、substr(獲取子串的起始索引)、splice(根據(jù)起始索引獲取子串)、split
特殊:
1、undefined 意味著值尚未設置或者根本不存在
2、null 空值
檢查類型使用typeof
類型比較和轉換
等于運算符==(值相等)
精確等于===(類型和值都要相等)
強制轉換:parseInt 、parseFloat
若提供無法轉換的值,返回NaN 【如果需要測試NaN,使用isNaN函數(shù)
二、Buildin對象
1、對象
創(chuàng)建一個對象 var o1 = new Object();
或 var o2 = {};
初始化:可以在初始化時指定成員名和值
Var user = {
name : “張三”,
age : 23
};
修改:
User.name = “李四”;
User[‘name’] = “王五”;
刪除屬性
Delete user.name
擴展
User.myValue = 123;//extend myValue
也可以嵌套
User.family = {mom:“coco”,dad:“kevin”};
User.grade = [99,98,97];
2、JSON
數(shù)據(jù)交換格式
JSON.parse 和 JSON.stringify
接收一個json字符串轉換成一個對象
接收一個對象轉換成json字符串表示形式
Var obj = {
“first_name”:“HTML”,
last_name :“CSS”
}
Var obj = {
“first_name”:“HTML”,
“l(fā)ast_name”:“CSS”
}
五、async await的使用和async await處理異步
ES7的新語法,需要結合ES6中promise寫
1、ES6中常見語法
(1)let const
(2)箭頭函數(shù)
(3)對象、屬性的簡寫
(4)模板字符串
(5)Promise
2、簡單理解async和await
async是讓方法編程異步
await是等待方法執(zhí)行完成
3、以流的方式讀寫文件
Fs.createReadStream
Fs.createWriteStream
pipe管道:創(chuàng)建一個可讀流、一個寫入流 讀取后直接寫入
web服務器:指網(wǎng)站服務器,如Apache、Nignx、ITS等
可以讓我們訪問web服務器上的網(wǎng)站,也可以下載上面的文件
1、封裝靜態(tài)web服務
2、路由:由一個uri(路徑)和一個特定的http方法組成的,涉及到如何響應客戶端對某個網(wǎng)站節(jié)點的訪問。
通俗的說,針對不同請求的url,處理不同的業(yè)務邏輯。
六、EJS模塊引擎
EJS是后臺模板,可以把數(shù)據(jù)庫和文件讀取的數(shù)據(jù)顯示到Html頁面上
安裝 npm install ejs --sava
ejs.renderFile(filename, data, options, function(err, str){
// str => Rendered HTML string
})
綁定數(shù)據(jù)
七、get、post方法
get:從指定的資源請求數(shù)據(jù)
post:向指定的資源提交要被處理的數(shù)據(jù)
獲取get傳值
Var urlInfo = url.parse(req.url,true);
urlInfo.query;
獲取post傳值
Var postData = “”;
總結
以上是生活随笔為你收集整理的Fifth Week:Node.js学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Forth Week :快速上手一门编程
- 下一篇: CCF-CSP 201903-2 二十四