在 Hacktoberfest 的第三週,我決定為一個較小但有前途的專案做出貢獻:線上拍賣系統。儘管該專案仍處於早期階段,但它已經顯示出成長潛力,而且我看到了幫助改進其程式碼庫的機會。我的任務是透過減少冗餘程式碼和改進整體結構來重構項目,使其更具可維護性和可擴展性。
我任務的核心目標是識別重複的程式碼模式並重構它們以使程式碼庫更乾淨且更易於維護。程式碼冗餘可能會導致不一致,使未來的更新更加困難,並增加錯誤的可能性。透過簡化程式碼,我的目標是在不改變功能的情況下提高效率。
1。集中非同步錯誤處理: Express.js 專案中的常見問題之一是用於處理非同步路由中的錯誤的重複 try-catch 區塊。為了解決這個問題,我引入了一個名為 asyncHandler 的實用函數,它包裝了所有非同步函數,確保自動捕獲任何錯誤並在整個應用程式中一致地處理。
// utils/asyncHandler.js const asyncHandler = (fn, errorMessage = "Internal server error") => (req, res, next) => Promise.resolve(fn(req, res, next)).catch((error) => { console.error(`Error: ${error.message}`); res.status(500).json({ error: errorMessage }); }); module.exports = asyncHandler;
這項變更不僅刪除了多餘的 try-catch 區塊,還使程式碼更加簡潔,更加專注於業務邏輯,而不是錯誤處理。
2。資料庫實用功能: 此專案有多個直接與資料庫互動的路線,經常重複類似的查詢。為了減少冗餘,我創建了一組可重複使用的實用函數來處理常見的資料庫查詢,例如獲取買家資訊或檢索交易。
// utils/dbUtils.js const getBuyerById = async (buyerId) => { const query = "SELECT * FROM Buyers WHERE Buyer_ID = "; const { rows } = await pool.query(query, [buyerId]); return rows.length > 0 ? rows[0] : null; }; const getTransactionsByBuyerId = async (buyerId) => { const query = "SELECT * FROM Transactions WHERE Buyer_ID = "; const { rows } = await pool.query(query, [buyerId]); return rows; }; module.exports = { getBuyerById, getTransactionsByBuyerId };
現在,程式碼庫可以依賴這些實用函數,而不是直接在每個路由中編寫 SQL 查詢,從而減少重複並使邏輯更易於管理。
3。統一響應處理: 另一個改進領域是響應處理。不同的路由發送成功和錯誤回應的模式不一致。為了標準化這一點,我引入了實用函數,例如 send404、send500 和 sendSuccess。
由於專案仍處於早期階段,我注意到一些遺失的路由,例如我可以輕鬆建立的 POST、DELETE 和 PUT。然而,我決定堅持只問我的問題。
請在評論中告訴我,您通常如何處理這種可以做出更多貢獻的情況...您是否打開一個新問題,是否只是創建它並執行 Pull 請求?我很想讀你的經驗。
以上是Hacktoberfest 週線上拍賣系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!