初識Node和內建模組

2023-03-15 15:01:06

初識Node與內建模組

概述:瞭解Node.js,熟悉內建模組:fs模組、path模組、http模組

初識Node.js

瀏覽器中的JavaScript執行環境

執行環境是指程式碼正常執行所需的必要環境

  • 對於Chrome瀏覽器執行環境=V8引擎+內建API(DOM、BOM等)
  • V8引擎負責解析和執行Js程式碼
  • 內建API是由執行環境提供的特殊介面,只能執行在所屬的執行環境中

JavaScript能否做後端開發?

也許你聽到的後端開發語言大多是:Java、Python、PHP等,但其實Js也能做後端開發,雖然效能不如他們,但對於前端開發人員十分友好。

如果我們把Js程式碼執行瀏覽器中,就可以進行前端開發;如果執行到Node.js中,就可以實現後端開發

什麼是Node.js?

Node.js是一個基於Chrome V8引擎的JavaScript執行環境

Node.js官網:http://nodejs.org/zh-cn/

Node.js中的JavaScript執行環境

對於Node.js執行環境=V8引擎+內建API

  • 瀏覽器是Js的前端執行環境
  • Node.js是Js的後端執行環境
  • Node.js中無法呼叫DOM和BOM等瀏覽器內建API

Node.js可以做什麼?

很多框架和工具,都基於Node的基礎功能,學會Node.js,可以「幫助前端程式設計師勝任更多工作」:

  • 基於Express框架,快速構建Web應用
  • 基於Electron框架,構建跨平臺桌面應用
  • 基於restify框架,構建API介面專案
  • 讀寫和運算元據庫、建立使用的命令列工具輔助開發等

如何走Node.js這條路?

JavaScript基礎語法——Node.js內建API模組(fs、path、http等)——第三方API模組(express、koa、egg、mysql等)

Node.js環境安裝

官網下載安裝

區分LST版本和Current版本:

  • LST:長期穩定版,適於追求穩定性的企業級專案
  • Current:新特性嚐鮮版,適於熱衷於嘗試新特性的使用者

檢視已安裝的版本號

//開啟終端(Terminal)
ndoe -v

在Node.js中執行JavaScript程式碼

開啟終端

輸入node要執行的Js檔案路徑

F:\xxx\xxx\Node.js>node index.js

終端中的快捷鍵:

  • 方向鍵↑:快速定位上一次命令
  • Tab:自動補全檔名
  • esc:快速清空已輸入的命令
  • cls:清空終端內容

fs檔案系統模組

什麼是fs模組?

fs模組是Node.js官方提供的用來操作檔案的模組,它提供了一系列的方法和屬性,用來滿足使用者對檔案的操作需求。

fs.readFile()方法,讀取檔案內容

fs.writeFile()方法,寫入內容

const fs=require('fs')

讀取指定檔案中的內容

  • 引數1:檔案的存放路徑
  • 引數2:讀取時採用的編碼格式(可選)
  • 引數3:回撥函數,得到失敗和成功的結果
fs.readFile(path[,options],callback)
const fs = require('fs');

fs.readFile('./files/1.txt', 'utf8', function (err, dataStr) {
    console.log(err)
    console.log("------------------")
    console.log(dataStr)
})

向指定的檔案中寫入內容

  • 引數1:檔案的存放路徑
  • 引數2:寫入的內容
  • 引數3:讀取時採用的編碼格式(可選)
  • 引數4:回撥函數,得到失敗和成功的結果
fs.writeFile(file,data[,options],callback)
const fs = require('fs');

fs.writeFile('./files/1.txt', 'Hello World!', function (err) {
    console.log(err)
})

路徑動態拼接錯誤問題

在使用fs模組操作檔案時,如果提供的操作路徑是以./或../開頭的相對路徑,很容易出現路徑動態拼接錯誤問題。

原因:程式碼執行時,會以node命令時所處的目錄,動態拼接被操作檔案的完整路徑。

解決:直接提供完整的絕對路徑(移植性差,不利於維護)。

fs.writeFile(__dirname+'/files/2.txt', newStr, function (err) {
    if (err) {
        return console.log("檔案寫入失敗!+", err.message)
    }
    console.log("檔案寫入成功!")
})

path路徑模組

什麼是path模組?

path模組是Node.js官方提供的用來處理路徑的模組,它提供了一系列的方法和屬性,用來滿足使用者對路徑的處理需求。

path.join()方法,將多個路徑片段拼接成一個完整的路徑字串

path.basename()方法,將路徑中的檔名解析出來

const path=require('path')

路徑拼接

path.join([...paths])
const path = require('path')

const pathStr = path.join('/a', '/b/c', '../', '/d', 'e') //../抵消一層
console.log(pathStr)//\a\b\d\e

獲取路徑中的檔名

  • 引數1:檔案的存放路徑
  • 引數2:副檔名
path.basename(path[,ext])
const path = require('path')

const fpath = './files/1.txt'
const fullname = path.basename(fpath)
console.log(fullname)//1.txt

const nameWithoutExt = path.basename(fpath, '.txt')
console.log(nameWithoutExt)//1

獲取路徑中的副檔名

path.extname(path)

http模組

什麼是http模組?

在網路節點中,負責消費資源的電腦,叫做使用者端;負責對外提供網路資源的電腦,叫做伺服器。

http模組是Node.js官方提供的用來建立Web伺服器的模組的模組,通過提供的http.createServer()方法,就能把一臺普通的電腦,變成一臺Web伺服器,從而對外提供Wbe資源。

const http=require('http')

伺服器和普通電腦的區別在於:伺服器上安裝了Web伺服器軟體,例如IIS、Apache等

再Node.js中,我們不需要使用IIS、Apache等第三方web伺服器軟體。因為我們可以基於Node.js的http模組,通過幾行程式碼,手寫一個伺服器軟體,從而對外提供web服務。

建立最基本的web伺服器

  1. 匯入http模組
  2. 建立web伺服器範例
  3. 為伺服器範例繫結reques時間,監聽使用者端請求
  4. 啟動伺服器
const http = require('http')
const server = http.createServer()

server.on('request', function (req, res) {
    console.log("Someone visit our web server")
})

server.listen(8082, function () {
    console.log("Server running at http://127.0.0.1:8082")
})

req請求物件

存取與使用者端相關的資料或屬性

const http = require('http')
const server = http.createServer()

server.on('request', req=>{
    const url=req.url//使用者端請求的url地址
    const method=req.method//使用者端請求的method型別
})

server.listen(8082, function () {
    console.log("Server running at http://127.0.0.1:8082")
})

res響應物件

存取與伺服器相關的資料或屬性

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
    const url = req.url//使用者端請求的url地址
    const method = req.method//使用者端請求的method型別
    //呼叫res.end向用戶端響應內容
    res.end("Hello World!")
})

server.listen(8082, function () {
    console.log("Server running at http://127.0.0.1:8082")
})

解決中文亂碼問題

res.setHeader('Content-Type','text/html; charset=utf-8')