初識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伺服器
- 匯入http模組
- 建立web伺服器例項
- 為伺服器例項繫結reques時間,監聽客戶端請求
- 啟動伺服器
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')