Node.js?中常用內(nèi)置模塊(path?路徑模塊)
前言
進(jìn)行服務(wù)端開發(fā),少不了對各種路徑的處理,之前我們是簡單粗暴的使用字符串的方法來對路徑進(jìn)行拼接或截取等操作。
Node.js 官方為我們提供了一個(gè)專門用來處理路徑的模塊:path模塊,這個(gè)模塊提供了一系列的方法和屬性,用來滿足用戶對路徑的處理需求。
路徑拼接:join方法
path模塊中有一個(gè)join方法,能夠非常智能的進(jìn)行路徑拼接:
使用path.join()方法,可以把多個(gè)路徑片段拼接為完整的路徑字符串
const path = require("path");
// 拼接/a和/b
const pathStr = path.join("/a", "/b");
console.log(pathStr); // '\a\b'join方法會(huì)識別當(dāng)前操作系統(tǒng),判斷應(yīng)當(dāng)使用正斜杠(/)還是反斜杠(\)
因?yàn)槲沂褂玫氖?code>Windows,所以生成的是“\a\b”(反斜杠),如果在Linux系統(tǒng)下則會(huì)生成“/a/b”(正斜杠),這就是join相比簡單的字符串拼接('/a'+'/b')更智能的一點(diǎn)
我們在寫路徑時(shí),習(xí)慣于使用正斜杠(/),但在Windows系統(tǒng)中文件路徑默認(rèn)使用的是反斜杠(\):

但我們在Windows系統(tǒng)中訪問路徑時(shí),正反斜杠都可以正常訪問:

但Linux系統(tǒng)中文件路徑只能使用正斜杠?。?!
join方法另一個(gè)智能的地方在于:它會(huì)會(huì)識別并匹配相對路徑的寫法
const path = require("path");
// 注意:join方法會(huì)識別并匹配相對路徑的寫法
// 如下../c會(huì)替換掉/b(相當(dāng)于找上一級的c而不是/b),所以最后拼接成的路徑為\a\c
const pathStr1 = path.join("/a", "/b", "../c");
console.log(pathStr1); // '\a\c'
// const pathStr1 = path.join("/a", "/b", "../../c");
// console.log(pathStr1); // '\c'
// const pathStr1 = path.join("/a", "/b", "./c");
// console.log(pathStr1); // '\a\b\c'
// const pathStr1 = path.join("/a", "/b", "c/d");
// console.log(pathStr1); // '\a\b\c\d'在一些目錄結(jié)構(gòu)復(fù)雜的項(xiàng)目,使用相對路徑可能會(huì)不盡人意,所以我們也經(jīng)常使用絕對路徑來避免一些不必要的麻煩,但我們?nèi)绾沃酪粋€(gè)目錄的絕對路徑呢?
Node.js中有一個(gè)全局變量:__dirname,它代表了當(dāng)前目錄的絕對路徑

通過絕對路徑訪問文件:
const path = require("path");
const fs = require("fs");
fs.readFile(path.join(__dirname, "/static/index.txt"), "utf-8", (err, data) => {
if (err) {
return console.log("讀取文件出錯(cuò)!", err);
}
console.log("文件內(nèi)容", data);
});
獲取文件名:basename方法
使用path.basename()方法,可以從一個(gè)文件路徑中,獲取到文件的名稱部分。
basename方法有兩個(gè)參數(shù):
- 第一個(gè)參數(shù)必傳,表示文件的路徑第
- 二個(gè)參數(shù)可選,表示文件的后綴名(也叫擴(kuò)展名)
不傳第二個(gè)參數(shù)可獲取文件完整名(包含后綴):
const path = require("path");
// 一個(gè)用于測試的文件路徑
const fpath = "./static/index.txt";
// 獲取完整文件名(帶擴(kuò)展名)
const fullName1 = path.basename(path.join(__dirname, fpath));
console.log(fullName1); // index.txt傳第二個(gè)參數(shù)時(shí),獲取的是不含后綴的文件名:
const path = require("path");
// 一個(gè)用于測試的文件路徑
const fpath = "./static/index.txt";
// 指定basename的第二個(gè)參數(shù)為文件的擴(kuò)展名,來獲取不帶擴(kuò)展名的文件名
const fullName2 = path.basename(fpath, ".txt");
console.log(fullName2); // index注意:如果第二個(gè)參數(shù)填的后綴與文件實(shí)際后綴不符合,則獲取到的依舊是文件的完整名(包含后綴)
const path = require("path");
// 一個(gè)用于測試的文件路徑
const fpath = "./static/index.txt";
const fullName2 = path.basename(fpath, ".js");
console.log(fullName2); // index.txt獲取文件擴(kuò)展名:extname方法
extname方法可用來獲取文件的擴(kuò)展名:
const path = require("path");
// 一個(gè)用于測試的文件路徑
const fpath = "./static/index.txt";
// 獲取文件擴(kuò)展名
const fullName1 = path.extname(path.join(__dirname, fpath));
console.log(fullName1); // .txt結(jié)語
這一節(jié)比較簡單,主要介紹了path模塊的幾個(gè)常用方法,到此這篇關(guān)于Node.js 中常用內(nèi)置模塊(path 路徑模塊)的文章就介紹到這了,更多相關(guān)Node.js path 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
npm?install?-g?@vue/cli常見問題解決匯總
這篇文章主要給大家介紹了關(guān)于npm?install?-g?@vue/cli常見問題解決的相關(guān)資料,文中通過實(shí)例代碼將解決的方式介紹的非常詳細(xì),對遇到這個(gè)問題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-08-08
nodejs multer實(shí)現(xiàn)文件上傳與下載
這篇文章主要為大家詳細(xì)介紹了nodejs multer實(shí)現(xiàn)文件上傳與下載的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
手把手教你把nodejs部署到linux上跑出hello world
本篇文章主要介紹了手把手教你把nodejs部署到linux上跑出hello world,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06
Node.js實(shí)現(xiàn)爬取網(wǎng)站圖片的示例代碼
本文將利用Node.js開發(fā)一個(gè)小示例—爬取某圖片網(wǎng)站的圖片,文中涉及的知識點(diǎn)有https模塊、cheerio模塊、fs模塊和閉包,感興趣的可以了解一下2022-04-04
node靜態(tài)服務(wù)器實(shí)現(xiàn)靜態(tài)讀取文件或文件夾
這篇文章主要介紹了node靜態(tài)服務(wù)器實(shí)現(xiàn)靜態(tài)讀取文件或文件夾,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
使用Typescript和ES模塊發(fā)布Node模塊的方法
這篇文章主要介紹了使用Typescript和ES模塊發(fā)布Node模塊的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
在Node.js中實(shí)現(xiàn)文件復(fù)制的方法和實(shí)例
這篇文章主要介紹了在Node.js中實(shí)現(xiàn)文件復(fù)制的方法和實(shí)例,使用FS模塊實(shí)現(xiàn),需要的朋友可以參考下2014-06-06

