真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

nodejs有什么作用

這篇文章主要為大家展示了“nodejs有什么作用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“nodejs有什么作用”這篇文章吧。

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出和龍免費做網(wǎng)站回饋大家。

一、概覽
1、html可以在瀏覽器直接打開運行,是因為瀏覽器是html文件的解析器
而js文件不能在瀏覽器直接運行,是因為瀏覽器不支持解析js文件,需要有一個解析器來解析js文件
可以下載安裝nodejs解析器,并且里面自帶了npm,通過node.exe可以直接運行js文件,是通過命令行的形式運行的
要運行某個js文件,直接node + 要運行的js文件名稱或者直接是js代碼,按回車即可

js操作的是瀏覽器,node操作的是電腦系統(tǒng)、文件等等

2、編輯器也可以直接運行,推薦使用webstorm

3、在Ecmascript部分,node和js其實是一樣的,比如數(shù)據(jù)類型的定義、語法結(jié)構(gòu)、內(nèi)置對象
在js中的頂層對象:window
在node中的頂層對象:global,沒有window這個概念

二、模塊
es6通過import export來進(jìn)行模塊化
nodejs通過require來進(jìn)行模塊化
html通過script標(biāo)簽來引入js文件
1、在nodeJs里面,一個js文件就是一個模塊,每個模塊都有自己的作用域,
我們使用var聲明的變量,不是全局的,而是屬于當(dāng)前模塊下的
比如:1.js
var a  = 100;
console.log(a);  //100
console.log(global.a);  //undefined  ,不是全局下面的變量
global.a = 200;
console.log(a);  //100 仍然是開始定義的100
console.log(global.a);  //這時候才是200

2、filename:表示當(dāng)前文件的絕對路徑
dirname:表示當(dāng)前文件所在目錄的絕對路徑
它們并非全局的,而是模塊作用域下的
所以global.filename是訪問不到的,返回undefined
console.log(
filename); //E:\webstorm文件夾\index.js
console.log(__dirname);  //E:\webstorm文件夾

3、模塊路徑
require();  //可以是絕對路徑、相對路徑
不能直接是require("1.js")這種不帶./的,這種加載方式,會加載node中的核心模塊,或者是node_modules里面的慕課

4、查找文件:
首先按照加載的模塊的文件名進(jìn)行查找;
如果沒有找到,則會在模塊文件名稱后面自動加上.js的后綴,然后進(jìn)行查找;
如果還沒有找到,則會在模塊文件名稱后面自動加上.json的后綴,然后進(jìn)行查找;
如果還沒有找到,則會在模塊文件名稱后面自動加上.node的后綴,然后進(jìn)行查找;
如果還沒有找到,就會報錯。

5、
在一個模塊中,通過var定義的變量,其作用域范圍是當(dāng)前模塊,外部不能夠直接訪問到;
如果我們想一個模塊能夠訪問另一個模塊中定義的變量,可以通過:

  • 把變量作為global對象的一個屬性(不推薦)
    global.a = 100;

  • 使用模塊對象 module,這個對象不是全局的,而是每個模塊下的對象
    模塊對象 module用于:保存提供和當(dāng)前模塊有關(guān)的一些信息,下面有很多屬性:
    nodejs有什么作用
    exports:{};  //module的子對象,通過這個對象可以把一個模塊中的局部變量暴露出去,供外部訪問
    因為exports也是一個對象,所以暴露變量出去之前,先聲明一個key值,value值就是這個局部變量

    var a = 100;
    module.exports.name = a;
    require();  //返回值就是module.exports對象

6、在模塊作用域下,還有一個內(nèi)置的模塊對象,exports,它其實就是module.exports
所以:
module.exports.name = a;  可以寫成 exports.name = a;
【注意】:不要這樣操作
module.exports = [1,2,3]
也不要:exports = [1,2,3],只是追加屬性,不要修改

三、global對象  全局對象
局部:
filename
dirname
全局:
日期對象  var d = new Date()
數(shù)組 var arr = new Array(1,2,3)
定時器

三-1、process對象(進(jìn)程對象)——全局對象
process === global.process  //true
可以在任何地方都能訪問到,通過這個對象提供的屬性和方法,使我們可以對當(dāng)前運行的程序的進(jìn)程進(jìn)行訪問和控制
1、process.argv
console.log(process.argv);  // [ 'D:\Program Files\nodejs\node.exe', 'E:\webstorm文件夾\2.js' ]
第一個是解析器,第二個是js文件
如果帶上參數(shù),那么返回的數(shù)組里面就會包含你運行時帶入的參數(shù)
舉例:  node process.argv a=1 // [ 'D:\Program Files\nodejs\node.exe', 'E:\webstorm文件夾\2.js','a=1' ]
2、process.execPath
開啟當(dāng)前進(jìn)程的這個可執(zhí)行文件的絕對路徑
3、env
返回用戶環(huán)境信息
4、version
返回node版本信息
5、versions
返回node以及node依賴包版本信息
6、pid
返回當(dāng)前進(jìn)程的pid  進(jìn)程是node.exe
7、title
返回當(dāng)前進(jìn)程的顯示名稱(Getters/Setters)
8、arch
返回當(dāng)前CPU處理器架構(gòu) arm/ia32/x64
9、platform
返回當(dāng)前操作平臺
10、cwd()
返回當(dāng)前進(jìn)程的工作目錄
11、chdir(directory)
改變當(dāng)前進(jìn)程的工作目錄
12、memoryUsage()
返回node進(jìn)程的內(nèi)存使用情況,單位是byte
12、exit(code)
退出
13、kill(pid)
向進(jìn)程發(fā)送信息
14、IO
a、stdin、stdout:標(biāo)準(zhǔn)輸入輸出流(IO)
標(biāo)準(zhǔn)輸入設(shè)備:向計算機(jī)輸入數(shù)據(jù)和信息的設(shè)備,是計算機(jī)與用戶或其他設(shè)備通信的橋梁。
例如:鼠標(biāo)、鍵盤、攝像頭等等
標(biāo)準(zhǔn)輸出設(shè)備:是計算機(jī)硬件系統(tǒng)的終端設(shè)備,把計算機(jī)數(shù)據(jù)或信息以數(shù)字、字符、圖像、聲音等形式表現(xiàn)出來。例如:顯示器、打印等等
stdin、stdout提供了操作輸入數(shù)據(jù)和輸出數(shù)據(jù)的方法,我們也通常稱為IO操作
stdin:標(biāo)準(zhǔn)輸入流
stdout:標(biāo)準(zhǔn)輸出流
console.log(...)  === process.stdout.write(...);

b、默認(rèn)情況下,輸入流是關(guān)閉的,要監(jiān)聽處理輸入流數(shù)據(jù),首先要開啟輸入流

//開啟
process.stdin.resume();
監(jiān)聽用戶的輸入數(shù)據(jù),輸入完成按下回車
process.stdin.on('data',function(chunk){
    console.log('用戶輸入了:'+chunk);
})

會一直監(jiān)聽,用戶輸入完成按下回車顯示數(shù)據(jù),再按下仍然會顯示第二次輸入的數(shù)據(jù)

四、Buffer類:類似數(shù)組
1、定義:一個用于更好的操作二進(jìn)制數(shù)據(jù)的類
我們在操作文件或者網(wǎng)絡(luò)數(shù)據(jù)的時候,其實操作的就是二進(jìn)制數(shù)據(jù)流;Node為我們提供了一個更加方便的去操作這種數(shù)據(jù)流的類Buffer,他是一個全局的類,global.Buffer === buffer

JavaScript 語言自身只有字符串?dāng)?shù)據(jù)類型,沒有二進(jìn)制數(shù)據(jù)類型。
但在處理像TCP流或文件流時,必須使用到二進(jìn)制數(shù)據(jù)。因此在 Node.js中,定義了一個 Buffer 類,該類用來創(chuàng)建一個專門存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。
在 Node.js 中,Buffer 類是隨 Node 內(nèi)核一起發(fā)布的核心庫。Buffer 庫為 Node.js 帶來了一種存儲原始數(shù)據(jù)的方法,可以讓 Node.js 處理二進(jìn)制數(shù)據(jù),每當(dāng)需要在 Node.js 中處理I/O操作中移動的數(shù)據(jù)時,就有可能使用 Buffer 庫。原始數(shù)據(jù)存儲在 Buffer 類的實例中。一個 Buffer 類似于一個整數(shù)數(shù)組,但它對應(yīng)于 V8 堆內(nèi)存之外的一塊原始內(nèi)存。

  • Buffer.alloc(size);  創(chuàng)建一個Buffer對象,并且為這個對象分配一個空間大小,大小是size的8位字節(jié);當(dāng)我們?yōu)橐粋€buffer對象分配了一個空間大小以后,其長度是固定的,不能更改。也就是后續(xù)不能再增加內(nèi)容了
    //控制臺顯示的是16進(jìn)制的

  • Buffer.from(array): 返回一個被 array 的值初始化的新的 Buffer 實例(傳入的 array 的元素只能是數(shù)字,不然就會自動被 0 覆蓋),聲明并賦值

  • Buffer.from(string[, encoding]): 返回一個被 string 的值初始化的新的 Buffer 實例,encoding默認(rèn)是utf8

let bf2 = Buffer.from('miaov');  //bf2.length 5  返回的是字節(jié)數(shù),不是字符串長度
let bf3 = Buffer.from('妙味');  //bf3.length  6  一個漢字占據(jù)3個字節(jié)

2、Buffer類方法

  • bf.length;  //buffer的字節(jié)長度

  • bf[ index ];  //獲取或者設(shè)置在index索引位置的8位字節(jié)內(nèi)容

  • bf.write(string , [offset] , [length] , [encoding]);  //根據(jù)參數(shù)offset偏移量和指定的encoding編碼方式,將參數(shù)string寫入數(shù)據(jù)寫入buffer

  • bf.toString( [encoding],[start],[end] );  //根據(jù)encoding返回一個解碼的string類型

  • bf.toJSON();  //返回一個JSON表示的Buffer實例,JSON.stringify將會默認(rèn)調(diào)用來字符串序列化這個Buffer實例

  • bf.slice( [start],[end] );  //返回一個新的buffer,這個buffer將會和老的buffer引用相同的內(nèi)存地址;
    注意:修改這個新的buffer實例slice切片,也會改變原來的buffer

  • bf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])  

    let bf2 = Buffer.from('miaov');
    console.log(bf2);  //  //十六進(jìn)制
    console.log(bf2.toString());  //'miaov'
    for (let i=0;i
    // bf.write(str,1);
    // console.log(bf);  //從buffer第1位開始寫入,第0位用00補上,
    bf.write(str,1,3);
    console.log(bf);  //只寫入三位,其他位用00補上,
    console.log(bf.toJSON());  //{ type: 'Buffer', data: [ 0, 109, 105, 97, 0 ] }

    3、Buffer中的靜態(tài)方法(又叫類方法,即不需要實例化即可使用的方法)

  • Buffer.isEncoding(encoding):如果給定的編碼encoding是有效的,返回true;否則返回false

  • Buffer.isBuffer(obj);  測試這個obj是否是一個Buffer

  • Buffer.byteLength(string,[encoding]):將會返回這個字符串的真實byte字節(jié)長度。encoding默認(rèn)編碼是utf8

    let str1 = 'json';
    console.log(str1.length);  //4 字符長度
    console.log(Buffer.byteLength(str1));  //4 字節(jié)長度
  • Buffer.concat(list,[totalLength]):返回一個保存著將傳入Buffer數(shù)組中所有buffer對象拼接在一起的buffer對象
    list是buffer對象,返回值是多個buffer對象拼接成的一個buffer對象
    totalLength是拼接后的字節(jié)長度,不傳是計算后的所有的字節(jié)長度,(建議預(yù)先設(shè)置,節(jié)省計算時間)

五、文件系統(tǒng)模塊 File System
1、該模塊是核心模塊,需要使用require導(dǎo)入后使用:let fs = require('fs');
2、該模塊提供了操作文件的一些API

  • 異步的打開一個文件:
    fs.open(path,flags,[mode],callback)
    path:要打開文件的路徑;
    flags:打開文件的方式:讀/寫
    mode:設(shè)置文件的模式:讀/寫/執(zhí)行
    callback:回調(diào)函數(shù),接受2個參數(shù):err、fd
    err:文件打開失敗的錯誤保存在err里面,如果成功err為null
    fd:被打開文件的標(biāo)識,和定時器類似,用于后續(xù)要操作文件的標(biāo)識,即后續(xù)如果要操作某個打開的文件,把這個文件標(biāo)識傳到后續(xù)操作的某些方法里面去,即可知道操作的是當(dāng)前文件

  • fs.open()的同步版:
    fs.openSync(path,flags,[mode])

  • 從指定的文檔標(biāo)識符fd讀取文件數(shù)據(jù)
    fs.read(fd,buffer,offset,length,position)
    fd:通過open方法成功打開一個文件返回的編號
    buffer:buffer對象,用于存儲打開文件內(nèi)部的信息
    offset:偏移量,數(shù)據(jù)從buffer對象里面的第幾位開始存儲,起始是0
    length: 讀取的內(nèi)容長度
    position:從文件的第幾位開始讀取,默認(rèn)是0,即從頭開始
    callback:接受三個參數(shù),err錯誤信息、length返回的新的buffer對象的長度;newBf:返回的新的buffer對象

  • fs.read的同步版本,返回bytesRead的個數(shù)
    fs.readSync(fd,buffer,offset,length,position,callback)

*通過文件標(biāo)識fd,向指定的文件中寫入buffer
fs.write(fd,buffer,offset,length,[position],callback)
同步版本:fs.writeSync(fd,buffer,offset,length,[position])
fd:通過open方法成功打開一個文件返回的編號
buffer:要寫入到文件的數(shù)據(jù)
offset:從buffer對象中第幾位開始寫入數(shù)據(jù),默認(rèn)是0
length: 要寫入的buffer數(shù)據(jù)的長度
position:向指定的文件的第幾位開始寫入buffer數(shù)據(jù),默認(rèn)是0,即從頭開始寫入數(shù)據(jù),如果開頭已經(jīng)有數(shù)據(jù),那么新的數(shù)據(jù)會覆蓋原始數(shù)據(jù)
callback:接受三個參數(shù),err錯誤信息、length寫入數(shù)據(jù)的buffer對象的長度;newBf:寫入數(shù)據(jù)的buffer對象

*通過文件標(biāo)識fd,把data寫入到文檔中,如果data不是buffer對象的實例,則會把值強制轉(zhuǎn)換成為一個字符串
fs.write(fd,data,[position],[encoding],callback)
同步版本:fs.writeSync(fd,data,[position],[encoding])
data:直接是一個字符串,此時不再從第幾位寫入了,而是全部寫入到文件里,所以沒有offset參數(shù)

  • 關(guān)閉一個打開的文件
    fs.close(fd,callback)
    同步版本:fs.closeSync(fd)

六、更好用的文件系統(tǒng)方法
1、fs.writeFile(filename,data,[options],callback)
異步的將數(shù)據(jù)寫入一個文件,如果文件不存在就新建,如果文件原先存在,則會被替換;data可以是一個string,也可以是一個原生buffer
同步版本:fs.writeFileSync(filename,data,[options])

2、fs.appendFile(filename,data,[options],callback)
異步的將數(shù)據(jù)添加到一個文件的尾部,如果文件不存在就新建,如果文件原先存在,則會將數(shù)據(jù)追加到文件的尾部;data可以是一個string,也可以是一個原生buffer
同步版本:fs.appendFileSync(filename,data,[options])

3、fs.readFile(filename,[options],callabck)
異步讀取一個文件的全部內(nèi)容
同步版本:fs.readFileSync(filename,[options])

4、fs.exists(path,callback)
檢查指定路徑的文件或者目錄是否存在
同步版本:fs.existsSync(path)

5、fs.unlink(path,callback)
刪除一個文件
同步版本:fs.unlink(path)

let fs = require('fs');
let filename = '2.txt';
//異步
if(fs.exists(filename,(err)=>{
    if(!err){
        fs.writeFile(filename,'hello',(err)=>{
            if(err){
                console.log("文件創(chuàng)建失敗")
            }else{
                console.log("文件創(chuàng)建成功")
            }
        })
    }else{
        fs.appendFile(filename,'-world',(err)=>{
            if(err){
                console.log('文件追加失敗')
            }else{
                console.log('文件追加成功')
            }
        })
    }
}));
//同步
if(!fs.existsSync(filename)){
    console.log('文件創(chuàng)建成功');
    fs.writeFileSync(filename,'hello')
}else{
    console.log('文件追加成功');
    fs.appendFileSync(filename,'-world')
}

6、fs.rename(oldPath,newPath,callback)
重命名
同步版本:fs.renameSync(oldPath,newPath)

7、fs.stat(path,callback)
讀取文件信息的狀態(tài),不是文件內(nèi)部的內(nèi)容,返回值是一個json,包括文件類型、文件日期、文件大小等等
mode=33206表示該文件是文件類型,mode=16822表示該文件是文件夾
同步版本:fs.statSync(path)

8、fs.watch(filename,[options],[listener])  
觀察指定路徑的改變,filename可以是文件或者目錄
//listener是一個監(jiān)聽器,回調(diào)函數(shù),有2個參數(shù):事件event和被監(jiān)聽文件的名稱filename

9、fs.mkdir(path,[mode],callback)  //mode模式,是只讀還是讀寫模式
創(chuàng)建文件夾
同步版本:fs.mkdirSync(path,[mode])

10、fs.readdir(path,callback)
讀取文件夾
同步版本:fs.readdirSync(path)
回調(diào)函數(shù)包括2個參數(shù),err錯誤信息和當(dāng)前文件夾下面所有的文件和文件夾信息fileList

11、fs.rmdir(path,callback)
刪除文件夾
同步版本:fs.rmdirSync(path)

七、使用node進(jìn)行web開發(fā)
1、用戶上網(wǎng)流程
用戶輸入https://www.baidu.com/
通過瀏覽器發(fā)送https請求(類似于打電話撥號),請求baidu.com,這個域名可以轉(zhuǎn)換為ip地址
通過ip定位,到網(wǎng)絡(luò)中指定的一臺機(jī)器上,然后該機(jī)器會接收到該用戶發(fā)送過來的請求,然后對該請求進(jìn)行處理,返回對應(yīng)的內(nèi)容

簡言之:
用戶通過瀏覽器發(fā)送一個http請求到指定的服務(wù)器
服務(wù)器接收到該請求,對該請求進(jìn)行分析和處理
服務(wù)器處理完成之后,返回對應(yīng)的數(shù)據(jù)到用戶機(jī)器
瀏覽器接受到服務(wù)器返回的數(shù)據(jù),并根據(jù)接收到的數(shù)據(jù)進(jìn)行分析和處理

web開發(fā):就是兩臺機(jī)器之間的數(shù)據(jù)交互,客戶端與服務(wù)端的交互
由客戶端發(fā)送一個http請求到指定的服務(wù)端 ——> 服務(wù)端接收并處理請求 ——> 返回數(shù)據(jù)到客戶端,類比迅雷下載
http協(xié)議:

要進(jìn)行web開發(fā),首先就必須處理關(guān)于服務(wù)端接收請求的這一過程,所以要搭建服務(wù)器,該服務(wù)器可以接收來自任何客戶端的鏈接和請求,然后進(jìn)行對應(yīng)處理

2、http模塊
let http = require('http');
使用該模塊可以進(jìn)行服務(wù)器的搭建
nodejs有什么作用
nodejs有什么作用

nodejs有什么作用

server.listen();  //如果不傳參數(shù),默認(rèn)系統(tǒng)會自動分配端口號,但是不建議,要主動設(shè)置端口號及主機(jī)名

res.writeHead( 200,'',{  //200,默認(rèn)返回ok
content-type : 'text/html;charset=utf-8'  //會將返回信息當(dāng)成html輸出到頁面,html標(biāo)簽起作用
content-type : 'text/plain'  //會將返回信息當(dāng)成文本文件輸出到頁面,html標(biāo)簽不起作用
} )

/*
* 搭建一個http的服務(wù)器,用于處理用戶發(fā)送的http請求
* 需要使用node提供一個模塊  http
* */
//加載一個http模塊
let http = require('http');
//通過http模塊下的createServer創(chuàng)建并返回一個web服務(wù)器對象
let server = http.createServer();
server.on('error',(err)=>{
    console.log(err)
})
server.on('listening',()=>{
    console.log('linstening...')
})
server.on('request',(req,res)=>{  //req是客戶端發(fā)送的數(shù)據(jù),res是服務(wù)端返回的數(shù)據(jù)
    console.log('有客戶端請求了')
    //console.log(req);  //req里面有請求頭、域名后面附帶的路徑信息/a/index.html、method方式
    //console.log(res);  //res里面包括response正文信息(即網(wǎng)頁上顯示的內(nèi)容)以及正文之外的一些信息,比如返回頭信息(網(wǎng)頁上不可見)
    res.writeHead('200','',{
        'content-type':'text/html;charset=utf-8'
    })
    // res.write('

hello

');     // res.end();     //可以合并為一步     res.end('

hello

'); }) server.listen(8080,'localhost');

3、url模塊
nodejs有什么作用

let url = require('url');
url.parse();  //專門用于解析url路徑,返回json格式數(shù)據(jù)

4、使用querystring模塊方法對get和post提交的數(shù)據(jù)進(jìn)行處理
nodejs有什么作用

let qs = require('querystring');
get方式發(fā)送數(shù)據(jù)
qs.parse('foo=bar&abc=xyz&abc=123');  //{foo: 'bar',abc: ['xyz', '123']}

post方式發(fā)送數(shù)據(jù)

let http = require('http');
let url = require('url');
let fs = require('fs');
let qs = require('querystring');
let server = http.createServer();
let filename = __dirname + '/html/';
server.on('error',(err)=>{
    console.log(err)
})
server.on('listening',()=>{
    console.log('listening')
})
server.on('request',(req,res)=>{
    var urlStr = url.parse( req.url );  //返回一個對象,里面的pathname屬性和req.url一樣
    switch (urlStr.pathname) {
        case '/':
            getData(filename+'index.html',req,res);
            break;
        case '/user':
            getData(filename+'user.html',req,res);
            break;
        case '/login':
            getData(filename+'login.html',req,res);
            break;
        case '/login/check':
            /*console.log(req.method);  //get
            console.log(urlStr.query);  //username=xiaoxiao&password=1
            console.log(qs.parse(urlStr.query));  //[Object: null prototype] { username: 'xiaoxiao', password: '1' }*/
            if(req.method.toUpperCase() === 'POST'){
                let str = '';
                req.on('data',(chunk)=>{
                    str += chunk;
                })
                req.on('end',()=>{
                    console.log(str);  //username=13795232495&password=111
                    console.log(qs.parse(str));  //[Object: null prototype] { username: '13795232495', password: '111' }
                })
            }
            break;
        default:
            break;
    }
})
function getData(filename,req,res) {
    fs.readFile(filename,(err,data)=>{
        //console.log(data.toString());  //輸出頁面內(nèi)的全部標(biāo)簽內(nèi)容
        if(err){
            res.writeHead(404,'',{
                'content-type':'text/html;charset=utf8'
            })
            res.end('

404

')         }else{             res.writeHead(200,'',{                 'content-type':'text/html;charset=utf8'             })             res.end(data)         }     }) } server.listen(8082,'localhost');
/*
* 搭建一個http的服務(wù)器,用于處理用戶發(fā)送的http請求
* 需要使用node提供一個模塊  http
* */
//加載一個http模塊
let http = require('http');
let url = require('url');
//通過http模塊下的createServer創(chuàng)建并返回一個web服務(wù)器對象
let server = http.createServer();
server.on('error',(err)=>{
    console.log(err)
})
server.on('listening',()=>{
    console.log('linstening...')
})
server.on('request',(req,res)=>{  //req是客戶端發(fā)送的數(shù)據(jù),res是服務(wù)端返回的數(shù)據(jù)
    console.log('有客戶端請求了')
    console.log(req.url);  //req里面有請求頭、域名后面附帶的路徑信息/a/index.html、method方式
    //console.log(res);  //res里面包括response正文信息(即網(wǎng)頁上顯示的內(nèi)容)以及正文之外的一些信息,比如返回頭信息(網(wǎng)頁上不可見)
    switch (req.url) {
        case '/':
            res.writeHead(200,'',{
                'content-type':'text/html;charset=utf-8'
            })
            res.end('

這是首頁

');             break;         case '/user':             res.writeHead(200,'',{                 'content-type':'text/html;charset=utf-8'             })             res.end('

這是用戶頁

');             break;         default:             res.writeHead(404,'',{                 'content-type':'text/html;charset=utf-8'             })             res.end('

404

');             break;     }     // res.write('

hello

');     // res.end();     //可以合并為一步     //res.end('

hello

') }) server.listen(8080,'localhost');

【注意】
1、所謂異步,就是執(zhí)行成功了之后會執(zhí)行一個回調(diào)函數(shù),下面的代碼會繼續(xù)執(zhí)行,即使報錯了也不妨礙下面代碼的執(zhí)行;同步,就是成功了就繼續(xù)執(zhí)行下面的代碼,報錯了就卡在這兒了,下面的代碼也就執(zhí)行不了了。
2、所謂的參數(shù)filename,包括文件的名稱和路徑(如果有路徑的話),比如在task文件夾下創(chuàng)建index.html
那么filename='task/index.html'
要包括文件的名稱,不能僅僅是一個空路徑,'task/'

以上是“nodejs有什么作用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁標(biāo)題:nodejs有什么作用
瀏覽地址:http://weahome.cn/article/pspjdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部