Heim  >  Artikel  >  Web-Frontend  >  Hacktoberfest-Woche Online-Auktionssystem

Hacktoberfest-Woche Online-Auktionssystem

Barbara Streisand
Barbara StreisandOriginal
2024-10-21 08:25:03309Durchsuche

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 verä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;

Durch diese Änderung wurden nicht nur überflüssige Try-Catch-Blöcke entfernt, sondern auch der Code sauberer und konzentrierter auf die Geschäftslogik statt auf die Fehlerbehandlung.

2. Datenbank-Dienstprogrammfunktionen: 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 = ";
  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 };

Anstatt SQL-Abfragen direkt in jede Route zu schreiben, kann sich die Codebasis jetzt 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.

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.

Das obige ist der detaillierte Inhalt vonHacktoberfest-Woche Online-Auktionssystem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn