node.js 學(xué)習(xí)筆記01

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)
  • 高性能

單線程

image.png

非阻塞式 I/O

image.png

事件驅(qū)動

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

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');

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個人入門學(xué)習(xí)用筆記、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,637評論 1 37
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,597評論 0 6
  • Node.js是目前非?;馃岬募夹g(shù),但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,191評論 2 58
  • 依韻劍兄: 文/以琳_ 一剪梅花舞雪,千秋歲月聽簫。曾經(jīng)相約在雙橋。 晚風星海近,晨露日暉...
    以琳_閱讀 955評論 32 60
  • 二五 感謝能與同學(xué)深刻地探討,也感謝他的賞識。 感謝老師看似平常de講課,卻給我們講了很認真實用得東西。 感謝表弟...
    XBIN閱讀 185評論 0 0

友情鏈接更多精彩內(nèi)容