在 Node 中使用文件夾操作

如何使用 Node 來操作文件夾 Node.js 的 fs 核心模組提供了很多方便的方法,可以用來處理文件夾。 驗證文件夾是否存在 使用 fs.access() 方法來檢查文件夾是否存在,並且 Node 是否有權限訪問。 創建新的文件夾 使用 fs.mkdir() 或 fs.mkdirSync() 方法來創建新的文件夾。 const fs = require('fs') const folderName = '/Users/flavio/test' try { if (!fs.existsSync(folderName)){ fs.mkdirSync(folderName) } } catch (err) { console.error(err) } 讀取文件夾內容 使用 fs.readdir() 或 fs.readdirSync 方法來讀取文件夾內容。 以下程式碼示範了如何讀取文件夾內容,包括文件和子文件夾,並返回它們的相對路徑。 const fs = require('fs') const path = require('path') const folderPath = '/Users/flavio' fs.readdirSync(folderPath) 你可以獲取完整的路徑: fs.readdirSync(folderPath).map(fileName => { return path.join(folderPath, fileName) } 你也可以過濾結果,只返回文件,排除文件夾: const isFile = fileName => { return fs....

在 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() 和與文件系統進行互動的其他操作。

在 Node.js 中使用 Axios 进行 HTTP 请求

Axios 是一个非常方便的 JavaScript 库,可以在 Node.js 中执行 HTTP 请求。 介绍 安装 Axios API GET 请求 在 GET 请求中添加参数 POST 请求 介绍 Axios 是一个非常受欢迎的 JavaScript 库,可以用来执行 HTTP 请求,适用于浏览器和 Node.js 平台。 它支持所有现代浏览器,包括对 IE8 及更高版本的支持。 它基于 Promise,并且可以使用 async/await 代码非常容易地执行 XHR 请求。 与原生的 Fetch API 相比,使用 Axios 具有许多优势: 支持旧版浏览器(Fetch 需要使用 polyfill) 可以中断请求 可以设置响应超时 内置 CSRF 保护 支持上传进度 执行自动的 JSON 数据转换 可用于 Node.js 安装 可以使用 npm 安装 Axios: npm install axios 或者使用 yarn 安装: yarn add axios 可以通过 unpkg....

在 PHP 中處理 HTTP 請求

讓我們看看如何在 PHP 中處理 HTTP 請求。 PHP 默認提供基於文件的路由。您可以創建一個 index.php 文件,並使其對應到 / 路徑。 在一開始時,我們在 Hello World 的示例中就看到了這一點。 同樣地,您可以創建一個 test.php 文件,然後 Apache 會在 /test 路由上自動提供該文件。 $_GET、$_POST 和 $_REQUEST 文件對所有 HTTP 請求進行響應,包括 GET、POST 和其他動詞。 對於任何請求,您可以使用 $_GET 对象來訪問所有查詢字符串數據,它被稱為 超全局 變量,並且在我們的所有 PHP 文件中都可以自動使用。 當然,在 GET 請求中最有用,但也可以在其他請求中將數據作為查詢字符串發送。 對於 POST、PUT 和 DELETE 請求,您更有可能需要以 urlencoded 數據或使用 FormData 對象發送的數據,PHP 使您可以使用 $_POST 來獲取這些數據。 還有一個 $_REQUEST 對象,它包含了 $_GET 和 $_POST 的所有數據。 $_SERVER 我們還有一個叫做 $_SERVER 的超全局變量,您可以使用它來獲取很多有用的信息。 您之前已經看到如何使用 phpinfo()。讓我們再次使用它來查看 $_SERVER 提供的信息。 在 MAMP 的根目錄中的 index....

在 Prisma 中使用多個字段作為唯一鍵

我在使用 Prisma 遇到了一個問題,讓我浪費了一些時間,所以我將寫下我是如何解決它的。 模型中沒有一個標記為 @id 的 id 字段,所以我添加了一個 @@unique(),表示 user 和 tweet 共同定義了唯一約束。 model Like { user Int tweet Int createdAt DateTime @default(now()) @@unique([user, tweet]) } 這意味著我們不能有多個相同的 (user, tweet) 條目。 當我嘗試刪除一個條目時: await prisma.like.delete({ where: { user: 1, tweet: 1 } }) 我遇到了以下錯誤消息: PrismaClientValidationError: Invalid `prisma.like.delete()` invocation: { where: { user: 12, ~~~~ tweet: 22 ~~~~~ } ~~~~~~~~~~~ } Argument where of type LikeWhereUniqueInput needs exactly one argument, but you provided user and tweet....

在 React 中更改 Heroicons SVG 的描邊寬度

我在一個 Next.js 應用程序中使用 Heroicons,它們方便地將圖標封裝為 React 組件。 我想要做的一件事是自定義描邊寬度,使它們顯示得更細。 我查看了 JSX 中如何做到這一點,也許使用屬性,但是我找不到方法。 我可以直接從該網站導入 SVG,但我喜歡使用 React 組件的方法。 由於某種原因,我認為直接設置全局 CSS 屬性並不起作用,因為它在 SVG 中是硬編碼的,但實際上它起作用了: svg path { stroke-width: 1; }

在 Svelte 中使用反應式語句

如何在 Svelte 中使用反應式語句 在 Svelte 中,您可以監聽組件狀態的變化並更新其他變數。 舉個例子,如果您有一個 count 變數: <script> let count = 0 </script> 並且您通過點擊一個按鈕來更新它: <script> let count = 0 const incrementCount = () => { count = count + 1 } </script> {count} <button on:click={incrementCount}>+1</button> 您可以使用特殊的 $: 語法來監聽 count 的變化,該語法定義了一個新區塊,在任何被引用的變數發生更改時 Svelte 將重新運行該區塊。 以下是一個例子: <script> let count = 0 const incrementCount = () => { count = count + 1 } $: console.log(`${count}`) </script> {count} <button on:click={incrementCount}>+1</button> 我使用了以下區塊: $: console....

在 Svelte 模板中解析 Promises

學習如何在 Svelte 模板中處理 Promises Promises 是一種在 JavaScript 中處理異步事件的強大工具。 ES2017 中相對較新引入的 await 語法使得使用 Promises 更加簡單。 Svelte 在模板中提供了 {#await} 語法,以直接處理模板層級的 Promises。 我們可以等待 Promises 解析,並為 Promise 的各種狀態(未解析、已解析和被拒絕)定義不同的 UI。 這是它的工作原理。我們定義一個 Promise,然後使用 {#await} 區塊等待其解析。 一旦 Promise 解析完成,結果將傳遞給 {:then} 區塊: <script> const fetchImage = (async () => { const response = await fetch('https://dog.ceo/api/breeds/image/random') return await response.json() })() </script> {#await fetchImage} <p>...等待中</p> {:then data} <img src={data.message} alt="狗圖片" /> {/await} 您可以通過添加 {:catch} 區塊來檢測 Promise 的拒絕: {#await fetchImage} <p>...等待中</p> {:then data} <img src={data....

在 Tailwind 中無法動態生成類別

我想在 Tailwind 中使用動態顏色,使用 JSX 中的這種語法: bg-${color}-500 但它並未應用於頁面,因為 Tailwind 在程式碼中找不到類似 bg-red-500 的文字,所以該程式碼未加入最終的 CSS 中。 因此,我改成在 switch 中列舉所有可能的顏色選項,然後生成類別: const getColorClass = (color) => { switch (color) { case 'green': return 'text-green-500' case 'blue': return 'text-blue-500' case 'red': return 'text-red-500' default: return '' } } 並在類別中使用此函數: <h1 className={`mt-10 ${getColorClass(color)}`}> ... 一個「快速」的方法是將可能需要的類別寫在註解中,像這樣: /* possible Grid values are grid-cols-1 grid-cols-2 grid-cols-3 */ <div className={`grid grid-cols-${data[0].length}`}>

在 Tailwind 中對子元素應用樣式

雖然不常發生,但有時候我會考慮如何在 Tailwind 中對子元素應用樣式。 下一次遇到這種情況,我就可以參考這篇部落格文章來解決。 你可以使用以下這個類別名稱將 bg-gray-300 這個樣式套用到當前元素的所有子元素上: [&>\*]:bg-gray-300 像這樣使用: <div class="[&>\*]:bg-gray-300"> .... </div>