如何使用Node.js刪除文件

了解如何使用Node.js從文件系統中刪除文件。 你可以使用Node提供的內置模塊fs,它提供了同步和異步兩種方法。 異步方法是fs.unlink()。 同步方法是fs.unlinkSync()。 它們的區別很簡單:同步調用會導致代碼阻塞並等待文件被刪除,異步方法則不會阻塞代碼,並且在文件被刪除後調用回調函數。 以下是如何使用這兩個函數: fs.unlinkSync(): const fs = require('fs'); const path = './file.txt'; try { fs.unlinkSync(path); // 文件刪除成功 } catch(err) { console.error(err); } fs.unlink(): const fs = require('fs'); const path = './file.txt'; fs.unlink(path, (err) => { if (err) { console.error(err); return; } // 文件刪除成功 });

如何使用Node.js寫入CSV檔案

使用Node.js將數組數據寫入CSV文件的快速教程 你可以使用 objects-to-csv 這個優秀的庫,快速將數組對象寫入CSV文件。 當然還有其他許多庫可供選擇。我在一個自己的項目中發現了這個庫的實用性,因此寫了這個小教程。 如果你需要更注重性能的應用程序,可以使用基於stream的庫,例如 fast-csv。 首先安裝它: npm install objects-to-csv 然後在你的Node.js代碼中引入它: const ObjectsToCsv = require('objects-to-csv') 當你有一個準備寫入CSV的對象數組時,初始化一個新的ObjectsToCsv對象實例: const csv = new ObjectsToCsv(list) 然後調用 csv.toDisk(),並傳入你要寫入的文件(相對於你的應用程序的基本路徑): await csv.toDisk('./list.csv') 這是一個基於Promise的API,我使用了await,所以你需要在一個async函數內調用這個API。 CSV中的列名自動從對象的屬性名中推斷出來。 請注意,這個命令會覆蓋文件中現有的內容。如果要追加到該文件,請傳遞一個帶有append屬性設置為true的第二個對象: await csv.toDisk('./list.csv', { append: true })

如何使用Node.js將圖像上傳至S3

在本篇文章中,我將分享如何使用Amazon Web Services提供的優秀雲端檔案存儲解決方案AWS S3來上傳圖像。 首先,安裝aws-sdk庫: npm install aws-sdk 在你的程式碼頂部導入它,以便在要添加文件上傳至S3功能的文件中使用它: import AWS from 'aws-sdk' 接下來,使用SDK來創建S3物件實例,並將其指派給s3變數: const s3 = new AWS.S3({ accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY, }) 請注意,我在這裡使用了兩個環境變數AWS_S3_ACCESS_KEY_ID和AWS_S3_SECRET_ACCESS_KEY。 現在進行一些"管理工作"。你需要在AWS上創建一個具有AWSCloudFormationFullAccess和AmazonS3FullAccess權限的具有程序化訪問權限的IAM設定文件,以及一個該使用者可以訪問的S3存儲桶。 我不會在這裡涵蓋這個方面,因為你可以找到大量關於這方面的文章和文檔。我只會提到你需要的JavaScript代碼。 現在,你需要一個圖像blob來上傳。 你可以使用如下的URL: const imageURL = 'https://url-to-image.jpg' const res = await fetch(imageURL) const blob = await res.buffer() 或者,你可以從表單的圖像字段上傳的多部分表單中獲取圖像: const imagePath = req.files[0].path const blob = fs.readFileSync(imagePath) 最後,調用s3.upload()方法,並調用其.promise()方法,以便你可以使用await等待它完成以獲取上傳的文件對象: const uploadedImage = await s3.upload({ Bucket: process.env.AWS_S3_BUCKET_NAME, Key: req.files[0].originalFilename, Body: blob, }).promise() AWS_S3_BUCKET_NAME是S3存儲桶的名稱,另一個環境變數。 最後,你可以通過引用Location屬性來獲取上傳的圖像在S3上的URL: uploadedImage.Location 你必須確保你將S3存儲桶設置為公開,以便可以訪問該圖像的URL。

如何使用Node.js批量轉換檔案名稱

我有一個需求,需要將我的資料夾結構從這樣的樣式轉換為這樣的樣式: posts/test/index.md posts/hey-cool-post/index.md 變成: posts/test.md posts/hey-cool-post.md 刪除包含 index.md 文件的資料夾,而是將檔案本身設置為文章標籤(也就是用於文章網址)。 我使用了一個Node.js腳本來實現這個目的。 腳本如下: const fs = require('fs') const glob = require('glob') const root_folder = '.' //在當前資料夾中搜索 glob(root_folder + '/**/index.md', (err, files) => { if (err) { console.log('錯誤', err) } else { for (const file_path of files) { const match = file_path.match(/\/(.*?)\//) const folder_name = match[1] fs.copyFile(file_path, './' + folder_name + '.md', (err) => { if (err) { console.log('出現錯誤:', err) } else { console....

如何使用Node.js獲取文件的最後更新日期

了解如何使用Node.js檢索文件的最後更新日期 在Node.js中,所有與文件相關的功能都由fs模塊提供。這個模塊暴露了一個名為statSync()的方法,可以同步獲取文件的詳細信息。 通過傳入文件路徑(相對於文件位置或絕對路徑),調用該方法將返回一個包含mtime屬性的對象。 mtime是一個Date對象實例,包含了文件的最後修改日期。 const fs = require('fs') const getFileUpdatedDate = (path) => { const stats = fs.statSync(path) return stats.mtime } 如果需要,請查看JavScript日期指南以了解更多關於如何處理日期對象的信息。

如何使用pm2來運行Node.js應用程式

這是一篇介紹如何在Linux上管理Node進程並透過GitHub Webhooks自動重啟它們的技術文章。 pm2是一個非常有用的Linux進程管理工具。 我在幾個項目中使用過它,現在我想告訴你如何使用它! 特別是我將使用它在DigitalOcean VPS上運行一個Node.js應用程式,並設置當我們將應用程式的更新推送到GitHub存儲庫時,pm2將會被觸發,從GitHub更新應用程式並重啟它。 聽起來很酷吧?那我們開始吧! 首先,在DigitalOcean上註冊並按照我的教程创建一個VPS。 重要提示:在DigitalOcean上使用NodeJS映象,它已經設置了pm2和node,而且除了root用戶外還有一個nodejs用戶。 當你的VPS運行起來之後,我們可以開始了。 確保你使用nodejs用戶進行ssh登錄。當以root身份登录時,只需運行su nodejs以使用該用戶。 你在VPS上運行的示例Node.js應用程式位於/var/www/html/文件夾中,它由hello.js文件組成。 應用程式的部署/運行已經通過pm2程序進行管理,它是一個守護進程管理器。 你可以使用pm2 list命令來查看現在正在運行的所有應用程序: 如果你對應用程式做任何更改,這些更改將在重新啟動應用程式之前不會生效: pm2 restart hello 你可以停止正在運行的應用程式: pm2 stop hello 如果你嘗試重新加載頁面,這將在瀏覽器中產生一個錯誤: 你可以運行: pm2 start hello 將應用程式重新啟動。 pm2的好處是,當系統重新啟動時,它會自動重新運行應用程序。 現在你已經看到了內置的Hello World的運行方式,讓我們部署另一個應用程式。 讓我們停止當前的示例應用程式: pm2 stop hello 並在/var/www/html中創建一個名為test的文件夾: mkdir test 進入該文件夾: cd test 運行以下命令: npm init -y 然後安裝Express: npm install express 現在運行nano app.js並添加以下代碼: const express = require("express") const app = express() app.get("/", (req, res) => res.send("Hello World!")) app.listen(3000, () => console....

如何修復 \"無法在模組之外使用 import 語句\" 的錯誤

以下是如何修復 JavaScript 中的錯誤 “Uncaught SyntaxError: cannot use import statement outside a module” 的方法。 在從 JavaScript 文件中導入函數時,我遇到了這個錯誤:Uncaught SyntaxError: cannot use import statement outside a module。 這個錯誤的原因是:你正在嘗試使用 import 語句,但你不在 ES 模組中(ES module)。 這個錯誤可能發生在 Node.js 環境中或瀏覽器中。 首先,這是 Node.js 的解決方案:你需要在項目的文件夾中添加一個 package.json 文件,並加入以下內容: { "type": "module" } 對於瀏覽器,當你加載腳本時,需要在 script 標籤中添加 type 屬性並設置值為 module,像這樣: <script type="module" src="./file.js"></script> 而不是: <script src="./file.js"></script>

如何修復 Next.js 的「找不到模組」錯誤

我在使用 Next.js 時遇到了以下問題: 模組找不到:找不到 ‘fs’ 在 Next.js 頁面中,您可以從加載 Node.js 模組的文件中導入方法。 這是沒問題的,只要您也在 getStaticProps() 中使用被導入的方法。 舉個例子,我有以下程式碼: import { getData } from '../lib/data' //... export async function getStaticProps() { const data = getData() return { props: { data, }, } } 當我把 const data = getData() 註解掉後,Next.js 開始報錯「找不到 ‘fs’ 模組」,因為 fs 是我在 lib/data 中首先導入的模組。 這種情況也可能發生在您導入的任何其他 Node 庫上。 原因是在 getStaticProps() 中的任何內容僅在在服務器環境中運行時才被調用,但如果我們不在其中調用 Node.js 函數,Next.js 就不知道該怎麼辦。

如何修復Homebrew錯誤“Permission denied @ apply2files”

在運行brew upgrade node以升級我的macOS上的Node.js安裝之後,Homebrew決定自動運行brew cleanup。 它正在進行清理,一直Removing:/Users/.....,直到我遇到了錯誤: Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins 看到路徑中的“docker”嗎? 原來是最近刪除了Docker,這導致了錯誤。我解決問題的方法是重新創建了一個Docker應用的文件夾: mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins 然後運行 brew cleanup 問題得以解決。 你的問題可能是由於其他缺少的庫引起的,而不是Docker,所以在這種情況下,你可以搜索你遇到的具體錯誤消息,看看是否有其他人遇到了相同的問題並解決了它。但這是一個開始。

如何修復在使用GitBook時出現的「cb.apply is not a function」錯誤

我經常使用 GitBook,這是一個小型的 Node.js 軟體,用於從一組 Markdown 檔案生成電子書。 我用它來製作我的電子書。今天在運行 gitbook pdf . 生成 PDF 時,我遇到了一個非常奇怪的錯誤: ➜ ebook git:(master) ✗ gitbook pdf . /usr/local/lib/node\_modules/gitbook-cli/node\_modules/npm/node\_modules/graceful-fs/polyfills.js:287 if (cb) cb.apply(this, arguments) ^ TypeError: cb.apply is not a function at /usr/local/lib/node\_modules/gitbook-cli/node\_modules/npm/node\_modules/graceful-fs/polyfills.js:287:18 cb.apply is not a function。這句話什麼意思?更重要的是,為什麼我現在出現這個錯誤?我最近沒有更新 gitbook 套件,也沒有…哦,我記得我更新了我運行的 Node.js 版本。但是我不知道為什麼這可能是問題所在。也許是吧。 不管怎樣…這個錯誤來自 /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js 文件。這是 graceful-js npm 套件,一個「為內建的 Node.js fs 模塊提供各種改進的替代方案」,每周安裝超過 3300 萬次。 其中一個改進似乎破壞了我的工作流程,就是今天! 我沒有太多時間去找出為什麼我的 Node.js 版本會導致這個我沒有創建的應用程序和這個庫出現問題。 我打開了 /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js 文件,這就是錯誤的來源。 這是引起問題的函數: function statFix (orig) { if (!orig) return orig // 較早版本的 Node....