nodejs 是什么
nodejs 不是編程語言,只是一個運行 javascript 的環(huán)境
- Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境
- Node.js 使用了一個事件驅(qū)動(事件循環(huán))、非阻塞式I/O (input/output)的模型,使其輕量又高效
- Node.js 的包管理器 npm 是全球最大的開源庫生態(tài)系統(tǒng)
- Node.js 可以讓 JavaScript 運行在服務(wù)器端上,它讓 JavaScript 延伸到了服務(wù)器,可以跟 PHP JSP Python Ruby 等后端語言平等
- nodejs 的不同之處,它不是獨立語言,而是運行在V8 上的運行環(huán)境
- LAMP 的差異:linux + apache(Nginx) + Mysql + PHP(Phthon)
- 高性能
單線程

非阻塞式 I/O

事件驅(qū)動


- REPL 環(huán)境
REPL全稱 Read-Eval-Print-Loop (交互式解析器)

nodejs 的代碼
在代碼完成后可以右鍵執(zhí)行代碼
- 使用 node 開發(fā)就是借助包來開發(fā),所以我們第一步是導(dǎo)入包
var http = require('http'); -
require表示導(dǎo)入一個包,參數(shù)表示包的名稱 - 使用 http 創(chuàng)建服務(wù)器,
createServer有個回調(diào)函數(shù),回調(diào)函數(shù)中有兩個參數(shù),第一個表示請求req:request,第二個表示響應(yīng) res:response
//只要有請求就必有回調(diào)
//當請求完畢后,返回給客戶端對應(yīng)的數(shù)據(jù)
res.end('hello world');
})```
- 監(jiān)聽服務(wù)器,第一個參數(shù)表示端口,第二個參數(shù)表示請求服務(wù)器的 ip 地址,端口號可以是任意,一般前2000是屬于系統(tǒng)使用的,所以我們可以使用2000以后的
```server.listen(3000,'127.0.0.1');```
- 響應(yīng)頭,一般有兩個參數(shù),第一個表示響應(yīng)狀態(tài)碼,第二個表示響應(yīng)的相關(guān)信息設(shè)置,主要設(shè)置內(nèi)容類型,一般我們需要設(shè)置相應(yīng)頭,可以用來設(shè)置響應(yīng)的內(nèi)容的顯示樣式```res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'})
res.end('<h1>hello world</h1>')```
- ```text/html```的時候會自動解析響應(yīng)數(shù)據(jù)為 html 格式,如果是 ```text/plain``` 則直接按字符解析
- REPL 原因,會直接返回```i buy6s```
var http = require('http');
var server = http.createServer(function (req,res) {
/*設(shè)置響應(yīng)頭*/
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end('i buy'+(1+2+3)+'s');
});
server.listen(3000,'127.0.0.1');
## 根據(jù)客戶端傳來的請求展示不同數(shù)據(jù)
//當在客戶端輸入不同的請求的 url 后,輸出不同的結(jié)果
var http = require('http');
var server = http.createServer(function(req,res){
//可以獲取到輸入的地址,然后判斷,通過 req 的 url 屬性獲取
// 注意通過 req.url 獲取的地址不包括 ip 和端口號
if(req.url =='/123'){
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end('123');
}
else if(req.url == '/456'){
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end('456');
}else{
res.end('404 not found')
}
})
server.listen(3000,'127.0.0.1');
## 讀取文件展示內(nèi)容通過獲取到的 url
var http = require('http');
/我們就需要讀取文件,所以需要導(dǎo)入一個讀取文件的包/
var fs = require('fs');
var server= http.createServer(function (req,res) {
if(req.url =='/fang'){
//加載xixi,不能通過res.end(頁面)返回,我們需要讀取對應(yīng)的文件,然后獲取對應(yīng)的數(shù)據(jù),然后把數(shù)據(jù)返回
/*第一個參數(shù)表示讀取的文件的路徑 ,第二個參數(shù)表示讀取后的回調(diào)
* 我們讀取的是當前目錄同級目錄下的xixi
* node.js是跨平臺的,所以為了不同的平臺都可以使用這個路徑
* 我們一般使用./表示當前路徑*/
fs.readFile('./test/1.xixi.html',function (err,data) {
/*設(shè)置響應(yīng)頭,以及返回對應(yīng)的數(shù)據(jù)*/
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end(data);
})
}
else if(req.url == '/yuan'){
fs.readFile('./test/2.haha.html',function (err,data) {
/*設(shè)置響應(yīng)頭,以及返回對應(yīng)的數(shù)據(jù)*/
res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
res.end(data);
})
}
});
//監(jiān)聽端口
server.listen(3000,'127.0.0.1');