Node檔案路徑

如何在Node中與檔案路徑互動並對其進行操作 從路徑中獲取資訊 處理路徑 系統中的每個檔案都有一個路徑。 在Linux和macOS上,路徑可能如下: /users/flavio/file.txt 而Windows電腦則不同,其結構如下: C:\users\flavio\file.txt 在應用程式中使用路徑時,需要注意這個差異。 您可以通過以下方式在文件中引入這個模組: const path = require('path') 然後就可以使用其中的方法了。 從路徑中獲取資訊 給定一個路徑,可以使用以下方法從中獲取資訊: dirname:獲取檔案的上級資料夾 basename:獲取檔案名稱部分 extname:獲取檔案擴展名 範例: const notes = '/users/flavio/notes.txt' path.dirname(notes) // /users/flavio path.basename(notes) // notes.txt path.extname(notes) // .txt 如果要獲取沒有擴展名的檔案名稱,可以將第二個引數指定給basename: path.basename(notes, path.extname(notes)) //notes 處理路徑 可以使用path.join()來結合路徑的兩個或多個部分: const name = 'flavio' path.join('/', 'users', name, 'notes.txt') //'/users/flavio/notes.txt' 可以使用path.resolve()來計算相對路徑的絕對路徑: path.resolve('flavio.txt') //'/Users/flavio/flavio.txt'(從我的家目錄執行時) 在這種情況下,Node會將/flavio.txt附加到當前工作目錄。如果您指定了第二個參數,resolve將使用第一個參數作為第二個參數的基礎: path.resolve('tmp', 'flavio.txt')//'/Users/flavio/tmp/flavio.txt'(從我的家目錄執行時) 如果第一個參數以斜線開頭,則表示它是絕對路徑: path.resolve('/etc', 'flavio.txt')//'/etc/flavio.txt' path.normalize()是另一個有用的函數,當路徑包含.、..或雙斜線等相對標識時,它將嘗試計算實際路徑: path.normalize('/users/flavio/..//test.txt') ///users/test.txt resolve和normalize都不會檢查路徑是否存在。它們只是基於它們獲得的資訊計算一個路徑。

npx Node套件執行器

npx是一種非常酷的執行Node代碼的方式,提供了許多有用的功能。 在這篇文章中,我想介紹一個非常強大的命令,從2017年7月開始在npm的5.2版本中可用:npx。 如果你不想安裝npm,你可以單獨安裝npx套件 npx讓你執行使用Node編寫並通過npm註冊表發佈的代碼。 輕鬆運行本地命令 Node開發人員習慣將大多數可執行命令作為全局套件發佈,以便它們能夠在路徑中並立即執行。 這很痛苦,因為實際上你不能安裝不同版本的相同命令。 運行npx 命令名稱將自動在項目的node_modules文件夾中找到正確的命令引用,而無需知道確切的路徑,也無需將套件安裝為全局註冊。 無需安裝的命令執行 npm還有另一個很棒的功能,就是允許在不先安裝它們的情況下運行命令。 這非常有用,主要原因是: 你不需要安裝任何東西 你可以運行不同版本的相同命令,使用@version語法 使用npx的典型演示是通過cowsay命令。cowsay會打印一頭牛,說出你在命令中輸入的內容。例如: cowsay "Hello"將打印以下內容: ____ < Hello > -------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||-----w | || || 現在,如果你之前從npm全局安裝了cowsay命令,否則當你嘗試運行該命令時,將會出錯。 使用npx,你可以在本地執行該npm命令,而無需將其安裝: npx cowsay "Hello" 就能運行了。 現在這只是一個有趣但毫無用處的命令。其他場景包括: 使用vue CLI工具創建新應用程序並運行:npx vue create my-vue-app 使用create-react-app創建新的React應用程序:npx create-react-app my-react-app 等等。 一旦下載完成,下載的代碼將被刪除。 使用不同的Node版本運行代碼 使用@指定版本,並結合node npm套件來達到這個目的: npx [[email protected]](/cdn-cgi/l/email-protection) -v #v6.14.3 npx [[email protected]](/cdn-cgi/l/email-protection) -v #v8.11.3 這有助於避免像nvm或其他Node版本管理工具這樣的工具。 直接從URL運行任意代碼片段 npx並不限制你只能運行npm註冊表中發佈的套件。 你可以運行存儲在GitHub Gist中的代碼,例如: npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 當然,運行你無法控制的代碼時,你需要小心,因為偉大的力量伴隨著偉大的責任。

使用 Node 獲取 HTTP 請求的請求體數據

了解如何使用 Node 通過 HTTP 請求體提取發送的 JSON 數據。 這是如何提取請求體中作為 JSON 發送的數據。 如果你使用的是 Express,那就非常簡單:使用 body-parser Node 模塊。 例如,要獲取此請求的請求體: const axios = require('axios') axios.post('/todos', { todo: '購買牛奶', }) 這是對應的服務器端代碼: const bodyParser = require('body-parser') app.use( bodyParser.urlencoded({ extended: true, }) ) app.use(bodyParser.json()) app.post('/endpoint', (req, res) => { console.log(req.body.todo) }) 如果你沒有使用 Express,而是想在原生的 Node 中實現這個功能,當然需要更多的工作,因為 Express 為你抽象了很多內容。 關鍵的是,當你使用 http.createServer() 初始化 HTTP 服務器時,回調函數被調用時,服務器已經獲取了所有的 HTTP 標頭,但是沒有請求體。 在連接的回調中,傳遞的 request 對象是一個流。 因此,我們需要監聽請求體內容被處理的事件,並且它以塊的形式進行處理。 我們首先通過監聽流的 data 事件來獲取數據,在數據結束時,流的 end 事件被調用一次: const server = http.createServer((req, res) => { // 我們可以訪問 HTTP 標頭 req....

使用 Node 讀取文件

如何使用 Node 和 fs 模組來讀取文件 在 Node 中,最簡單的讀取文件的方式是使用 fs.readFile() 方法,將文件路徑和一個回調函數作為參數傳遞給該方法,回調函數將在文件數據(以及錯誤)讀取完成後被調用: const fs = require('fs') fs.readFile('/Users/flavio/test.txt', (err, data) => { if (err) { console.error(err) return } console.log(data) }) 另外,你也可以使用同步版本的 fs.readFileSync(): const fs = require('fs') try { const data = fs.readFileSync('/Users/flavio/test.txt', 'utf8') console.log(data) } catch (err) { console.error(err) } 默認的編碼格式是 utf8,但你也可以通過第二個參數來指定自定義的編碼。 fs.readFile() 和 fs.readFileSync() 這兩個方法在返回數據之前將完整的文件內容讀取到內存中。 這意味著,處理大文件將對內存消耗和程序執行速度產生較大的影響。 在這種情況下,更好的選擇是使用流(stream)來讀取文件內容。

在 Node 中使用文件描述符

如何使用 Node 與文件描述符進行交互? 在與文件系統中的文件進行交互之前,您必須獲取文件描述符。 文件描述符是使用 fs 模塊提供的 open() 方法開啟文件時返回的東西,如下所示: const fs = require('fs') fs.open('/Users/flavio/test.txt', 'r', (err, fd) => { //fd 是我們的文件描述符 }) 注意我們在 fs.open() 調用的第二個參數中使用的 r。 該標誌表示我們將文件以只讀方式打開。 您通常會使用其他標誌,如下: r+:打開文件以進行讀寫操作 w+:打開文件以進行讀寫操作,並將流定位到文件的開頭。如果文件不存在,則創建文件 a:打開文件以進行寫操作,並將流定位到文件的末尾。如果文件不存在,則創建文件 a+:打開文件以進行讀寫操作,並將流定位到文件的末尾。如果文件不存在,則創建文件 您也可以使用 fs.openSync 方法打開文件,它不像回調函數那樣提供文件描述符對象,而是直接返回它,如下所示: const fs = require('fs') try { const fd = fs.openSync('/Users/flavio/test.txt', 'r') } catch (err) { console.error(err) } 當您獲取文件描述符後,您可以按照自己的選擇進行所有需要它的操作,例如呼叫 fs.open() 和與文件系統進行互動的其他操作。