„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Hacktoberfest-Woche Online-Auktionssystem

Hacktoberfest-Woche Online-Auktionssystem

Veröffentlicht am 06.11.2024
Durchsuche:395

Hacktoberfest week Online Auction System

Überblick

Während der dritten Woche des Hacktoberfests beschloss ich, zu einem kleineren, aber vielversprechenden Projekt beizutragen: einem Online-Auktionssystem. Obwohl sich das Projekt noch in einem frühen Stadium befindet, zeigt es bereits Wachstumspotenzial und ich sah eine Möglichkeit, zur Verbesserung seiner Codebasis beizutragen. Meine Aufgabe bestand darin, das Projekt umzugestalten, indem ich redundanten Code reduzierte und die Gesamtstruktur verbesserte, um es wartbarer und skalierbarer zu machen.

Meine Aufgabe

Das Hauptziel meiner Aufgabe bestand darin, sich wiederholende Codemuster zu identifizieren und sie umzugestalten, um die Codebasis sauberer und einfacher zu warten. Code-Redundanz kann zu Inkonsistenzen führen, zukünftige Aktualisierungen erschweren und die Wahrscheinlichkeit von Fehlern erhöhen. Durch die Optimierung des Codes wollte ich die Effizienz verbessern, ohne die Funktionalität zu ändern.

Wichtige Änderungen:

1. Zentralisierte asynchrone Fehlerbehandlung: Eines der häufigsten Probleme in Express.js-Projekten sind sich wiederholende Try-Catch-Blöcke zur Behandlung von Fehlern in asynchronen Routen. Um dieses Problem zu beheben, habe ich eine Dienstprogrammfunktion namens asyncHandler eingeführt, die alle asynchronen Funktionen umschließt und sicherstellt, dass alle Fehler automatisch abgefangen und in der gesamten App konsistent behandelt werden.

// 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;

Diese Änderung entfernte nicht nur redundante Try-Catch-Blöcke, sondern machte den Code auch sauberer und konzentrierte sich mehr auf die Geschäftslogik als auf die Fehlerbehandlung.

2. Funktionen des Datenbank-Dienstprogramms: Das Projekt verfügte über mehrere Routen, die direkt mit der Datenbank interagierten und häufig ähnliche Abfragen wiederholten. Um Redundanz zu reduzieren, habe ich eine Reihe wiederverwendbarer Hilfsfunktionen erstellt, um häufige Datenbankabfragen zu verarbeiten, z. B. das Abrufen von Käuferinformationen oder das Abrufen von Transaktionen.

// utils/dbUtils.js
const getBuyerById = async (buyerId) => {
  const query = "SELECT * FROM Buyers WHERE Buyer_ID = $1";
  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 = $1";
  const { rows } = await pool.query(query, [buyerId]);
  return rows;
};

module.exports = { getBuyerById, getTransactionsByBuyerId };

Anstatt SQL-Abfragen direkt in jede Route zu schreiben, kann sich die Codebasis nun auf diese Hilfsfunktionen verlassen, wodurch Duplikate reduziert und die Logik einfacher verwaltet werden können.

3. Einheitliche Antwortverarbeitung: Ein weiterer Verbesserungsbereich war die Antwortverarbeitung. Verschiedene Routen wiesen inkonsistente Muster für das Senden von Erfolgs- und Fehlerantworten auf. Um dies zu standardisieren, habe ich Hilfsfunktionen wie send404, send500 und sendSuccess eingeführt.

Diskussion

Da sich das Projekt noch in einem frühen Stadium befindet, sind mir einige fehlende Routen wie POST, DELETE und PUT aufgefallen, die ich leicht hätte erstellen können. Ich beschloss jedoch, nur bei meinem Problem zu bleiben, das gefragt wurde.

Lassen Sie mich in den Kommentaren wissen, wie Sie normalerweise mit solchen Situationen umgehen, sodass Sie mehr beitragen könnten ... Öffnen Sie ein neues Problem, erstellen Sie es einfach und stellen Sie eine Pull-Anfrage? Ich würde gerne Ihre Erfahrungen lesen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/htsagara/hacktoberfest-week-3-online-auction-system-4knp?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3