Node.js

Node.js是什么

  • JavaScript運(yùn)行時(shí)
  • 不是語言,也不是框架,是一個(gè)平臺(tái)
  • Node.js中的JavaScript
    • 沒有BOM,DOM
    • EcmaScript基本的JavaScript語言部分
    • 在node中為JavaScript提供了一些服務(wù)器級(jí)別的API
安裝
  • 訪問nodejs官網(wǎng),點(diǎn)擊藍(lán)色選框區(qū)域穩(wěn)定版,并下載https://nodejs.org/en/

  • 打開終端 命令行檢測是否安裝成功

    • node -v
  • 執(zhí)行腳本文件

    • 創(chuàng)建一個(gè)JS腳本文件
    • 打開終端,定位到所在目錄
    • 輸入 node 文件名 執(zhí)行對(duì)應(yīng)的文件
    • 解析文件 終端會(huì)讀取文件的內(nèi)容
  • 注意文件名不能node.js命名

文件數(shù)據(jù)操作

// 瀏覽器中的javaScript是沒有文件操作的能力的

 // 但是node中的JavaScript具有文件操作的能力

 //fs是 fileSystem的簡寫 就是文件系統(tǒng)的意思

/*
* 在node中 如果想要進(jìn)行文件操作,就必須引入fs這個(gè)核心模塊
*
* 在fs這個(gè)核心模塊中,提供了所有的文件操作相關(guān)的API
*
* 例如:fs.readFile就是用來讀取文件的
*
* */

//加載 fs 的核心模塊

 var fs =  require("fs");

 // 2.讀取文件

/*
* 第一個(gè)參數(shù) 是路徑
*
* 第二個(gè)參數(shù) 會(huì)回調(diào)函數(shù)
*
* error 錯(cuò)誤(讀取失敗)
*
* data 數(shù)據(jù) (讀取成功)
*
* */

fs.readFile("data/hello.txt",function (error,data) {

    /*
    * data有數(shù)據(jù)的話 打印的是二進(jìn)制數(shù)據(jù)
    *
    * 要通過toString方法轉(zhuǎn)化成 我們認(rèn)識(shí)的字符串
    *
    * */
    // 打印結(jié)果 <Buffer 0a 0a e8 bf 99 e6 98 af e4 b8 80 e4 b8 aa 20 e6 96 87 e4 bb b6 e8 af bb e5 8f 96>
    console.log(data.toString());
});


創(chuàng)建node服務(wù)器
  • 加載核心模塊
  • 創(chuàng)建web服務(wù)器
  • 注冊請(qǐng)求事件
  • 綁定端口號(hào),啟動(dòng)服務(wù)器

//1.加載核心模塊

var htt = require("http");

//2.使用htt.createServer()創(chuàng)建一個(gè)web服務(wù)器

var server  = htt.createServer();

//3.服務(wù)器   對(duì)數(shù)據(jù)服務(wù)

/*
* 發(fā)送請(qǐng)求
*
* 接收請(qǐng)求
*
* 處理請(qǐng)求
*
*
* 給個(gè)反饋(發(fā)送響應(yīng))
*
* */

//  注冊  request請(qǐng)求事件 當(dāng)客戶端請(qǐng)求過來,就會(huì)自動(dòng)觸發(fā)服務(wù)器的request請(qǐng)求事件

// 然后 執(zhí)行第二個(gè)參數(shù):回調(diào)處理
/*
* 2個(gè)參數(shù)
* Request 請(qǐng)求對(duì)象, 用來獲取 客服端的請(qǐng)求信息
*
* Response 響應(yīng)對(duì)象,可以用來給客戶端發(fā)送響應(yīng)消息
*
* */
server.on("request",function (request,response) {

    //路徑
    console.log("收到客戶端的請(qǐng)求了" + request.url);

    // 根據(jù)不同的請(qǐng)求路徑  響應(yīng)不同的結(jié)果

//   /index

// /login  登錄

// /register  注冊

    if (request.url == "/index") {

        response.write("home");
        console.log("看看有沒");

    } else if (request.url == "/login"){
        response.write("login");
    } else if (response.url == "/register"){
        response.write("register");
    } else {
        //  response 對(duì)象有一個(gè)方法:write 可以用客戶端發(fā)送響應(yīng)數(shù)據(jù)
        //write可以使用多次,但是最后一定要使用end來結(jié)束響應(yīng),否則客戶端會(huì)一直等待(就是重啟服務(wù)器)


        response.write("hello");
    }

    //結(jié)束響應(yīng),可以返回?cái)?shù)據(jù)給客戶端了
    response.end();

});

//4.綁定端口號(hào),啟動(dòng)服務(wù)器

server.listen(3000,function () {
    //回調(diào)函數(shù)

    console.log("服務(wù)器啟動(dòng)成功");

});
// control + c 關(guān)閉服務(wù)

//IP地址 和 端口號(hào)

// ip地址用來定位計(jì)算機(jī)
// 端口號(hào)用來定位具體的應(yīng)用程序
//所有的通信軟件都會(huì)占用一個(gè)端口號(hào)
// 端口號(hào)的范圍 0-65536
 


  • 發(fā)送請(qǐng)求


    http服務(wù).png
  • 響應(yīng)


    server響應(yīng).png
不同模塊之間的通信
  • 在node中 沒有全局作用域 只有模塊作用域(文件作用域,2個(gè)文件之間的相同變量不相互影響)
    • 外部訪問不到內(nèi)部
    • 內(nèi)部也訪問不到外部


      模塊作用域
  • 既然是模塊作用域,那如何怎么模塊和模塊之間進(jìn)行通信 ?
  • 導(dǎo)出和加載 模塊之間的通信


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

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

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