CSS 錯誤處理

CSS 在處理錯誤時非常靈活。當它遇到錯誤時,它不同於 JavaScript,不會整個拆開東西然後全部停止執行腳本。 CSS 試圖盡力遵從你的要求。 如果一行有錯誤,它會跳過該行並繼續往下一行執行,而不報錯。 如果你忘記在一行上加上分號: p { font-size: 20px color: black; border: 1px solid black; } 有錯誤的那一行和下一行 都不會 生效,但第三行的規則將會正確應用在頁面上。基本上,CSS 會一直掃描直到遇到分號,但在達到之前,該規則已經變成了 font-size: 20px color: black;,這是無效的,所以它會跳過。 有時候我們很難意識到錯誤在哪裡,因為瀏覽器不會告訴我們。 這也是為什麼有像 CSS Lint 這樣的工具存在的原因。

express-validate-input

#使用express-validator在Express中驗證輸入 了解如何驗證Express端點中的輸入數據。 假設你有一個POST端點,接受名字、郵件和年齡參數: const express = require('express') const app = express() app.use(express.json()) app.post('/form', (req, res) => { const name = req.body.name const email = req.body.email const age = req.body.age }) 如何對這些結果進行服務器端驗證,以確保: name是一個至少3個字符的字符串嗎? email是一個真實的郵件地址嗎? age是一個介於0和110之間的數字嗎? 處理Express中從外部輸入的任何類型的驗證的最佳方法是使用express-validator套件: npm install express-validator 您需要從該套件中導入check和validationResult對象: const { check, validationResult } = require('express-validator'); 我們將check()調用的數組作為post()調用的第二個參數傳遞。每個check()調用接受參數名作為參數。然後,我們調用validationResult()來驗證是否有驗證錯誤。如果有,我們將錯誤返回給客戶端: app.post('/form', [ check('name').isLength({ min: 3 }), check('email').isEmail(), check('age').isNumeric() ], (req, res) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(422).json({ errors: errors....

JavaScript 如何退出函數

如何在 JavaScript 函數的中間快速結束退出? 你可以使用 return 關鍵字來實現。 當 JavaScript 遇到 return 關鍵字時,它立即退出函數,並將你在 return 之後傳遞的任何變量(或值)作為結果返回。 這是我經常使用的方法,以確保如果某個條件不符合預期,我可以立即退出函數。 也許我期望有一個參數,但它不存在: function calculateSomething(param) { if (!param) { return; } // 繼續執行函數 } 如果存在 param 值,函數將按預期繼續執行,否則它將立即停止。 在這個例子中,我返回了一個描述錯誤的對象: function calculateSomething(param) { if (!param) { return { error: true, message: '需要參數' }; } // 繼續執行函數 } 你返回的內容取決於調用函數的代碼對它的期望。 也許你可以在一切正常時返回 true,在出現問題時返回 false。或者像上面的例子中展示的那樣,返回一個具有 error 布爾標記的對象,以便你可以檢查結果是否包含該屬性(或在成功的情況下,返回一個具有 success: true 屬性的對象)。

Node.js中的錯誤處理

如何在Node.js應用程式執行期間處理錯誤 Node.js中的錯誤通過異常處理。 建立異常 使用throw關鍵字來建立異常: throw value JavaScript執行此行時,正常程式流程將中斷,控制權會返回到最近的異常處理器。 通常在用戶端程式碼中,value可以是任何JavaScript值,包括字串、數字或對象。 在Node.js中,我們不會拋出字串,而是拋出錯誤對象。 錯誤對象 錯誤對象是Error對象的實例,或是擴展了Error類別的對象,這些類別提供在錯誤核心模組中。 throw new Error('Ran out of coffee') 或者 class NotEnoughCoffeeError extends Error { //... } throw new NotEnoughCoffeeError 處理異常 異常處理器是一個try/catch語句。 在try區塊中的代碼行引發的任何異常都在相應的catch區塊中進行處理: try { //代碼行 } catch (e) { } 此示例中的e是異常值。 您可以添加多個處理器,可以捕獲不同類型的錯誤。 捕獲未捕獲的異常 如果在執行程序期間拋出未捕獲的異常,程序將崩潰。 為了解決這個問題,你可以聽取process對象上的uncaughtException事件: process.on('uncaughtException', (err) => { console.error('There was an uncaught error', err) process.exit(1) //根據Node文檔,這是必需的 }) 您無需匯入process核心模組,因為它會自動注入。 使用承諾處理異常 使用承諾,您可以鏈接不同的操作,並在結尾處理錯誤: doSomething1() .then(doSomething2()) .then(doSomething3()) .catch(err => console.error(err)) 您如何知道錯誤發生在哪裡?實際上,您並不知道,但您可以在調用的每個函數(doSomethingX)中處理錯誤,在錯誤處理器內部拋出一個新錯誤,將調用外部的catch處理器: const doSomething1 = () => { //....

Python例外處理

處理錯誤的方式非常重要。 Python提供了異常處理功能。 如果將一些代碼放在try:區塊中: try: # 一些代碼 如果發生錯誤,Python將會提示您,您可以使用except區塊來確定發生了哪種錯誤: try: # 一些代碼 except <錯誤1>: # <錯誤1>的處理方式 except <錯誤2>: # <錯誤2>的處理方式 如果要捕獲所有異常,您可以在except中使用任何錯誤類型: try: # 一些代碼 except <錯誤1>: # <錯誤1>的處理方式 except: # 捕獲所有其他異常 如果沒有發生任何異常,則會執行else區塊: try: # 一些代碼 except <錯誤1>: # <錯誤1>的處理方式 except <錯誤2>: # <錯誤2>的處理方式 else: # 沒有發生異常,代碼順利執行 finally區塊可以讓您在任何情況下執行某些操作,無論發生錯誤與否: try: # 一些代碼 except <錯誤1>: # <錯誤1>的處理方式 except <錯誤2>: # <錯誤2>的處理方式 else: # 沒有發生異常,代碼順利執行 finally: # 無論如何都要執行的操作 要發生的具體錯誤取決於您正在執行的操作。 例如,如果您正在讀取文件,可能會出現EOFError。如果您將數字除以零,將會出現ZeroDivisionError。如果有類型轉換問題,可能會出現TypeError。 試試這段代碼: result = 2 / 0 print(result) 程式將以錯誤結束:...

修復“物件無法用作 React 子元素”的錯誤

我在一個 React(Next.js)應用程式中遇到了這個錯誤: 錯誤:物件無法用作 React 子元素(找到:[object Promise])。 如果您要渲染一個子元素集合,請改用陣列。 在花了一些時間嘗試弄清楚錯誤是什麼意思後,我發現原來是因為我將頁面組件導出為 async,這是因為我從另一個使用 app 資料夾的 Next.js 專案中複製的。在 app 資料夾中可以這麼做,但在 pages 資料夾中不行。 刪除 async 後問題解決了: export default function Page() { }

如何處理 Promise 的拒絕

在過去幾年中,Promises 可說是 JavaScript 中最好的東西之一。 當我們調用一個返回 Promise 的函數時,我們可以使用 then() 方法來鏈接一個在 Promise 解析 時運行的函數。 以下是使用 Fetch API 的示例: fetch('/data.json') .then(response => { console.log(response.status) }) 如果在 fetch() 調用期間出現錯誤該怎麼辦?可能是因為網絡不可用,或者網絡請求返回了錯誤。 Promise 將會被拒絕。一個 Promise 會像這樣: const thePromise = new Promise((resolve, reject) => { }) 在 Promise 內部,我們會收到兩個參數,也就是兩個函數。在 Promise 主體內,如果一切正常,則會調用 resolve() 函數: const thePromise = new Promise((resolve, reject) => { resolve('OK') // 你可以傳遞任何值 }) 如果出現問題,則會調用 reject() 函數: const thePromise = new Promise((resolve, reject) => { reject('錯誤訊息') // 你可以傳遞任何值 }) 如果出現問題,我們必須處理 Promise 的拒絕。我們可以使用 Promise 的 catch() 方法來處理:...

如何解決 Node.js 中的 `util.pump is not a function` 錯誤

找出如何解決在運行舊的 Node 代碼時可能出現的 util.pump is not a function 錯誤。 如果在運行 Node.js 應用程序或代碼片段時出現 “util.pump is not a function” 錯誤,則是因為應用程序代碼過於陳舊,與當前的 Node.js 運行時不兼容。 Node.js 提供的 pump() 方法用於使用以下語法將可讀流寫入可寫流: util.pump(readableStream, writableStream) 該方法已經被廢棄很長時間,並且在 2016 年 4 月釋出的 Node.js 6.0 版本中被移除。 幸運的是,解決這個問題很簡單。 將上述語法替換為: const { pipeline } = require('stream') //... pipeline(readableStream, writableStream, () => {}) 第三個參數是當管道完成時將被調用的回調函數。 在此處閱讀有關 pipeline 的更多信息。