Heim > Web-Frontend > js-Tutorial > Hauptteil

Hacktoberfest-Woche Online-Auktionssystem

Barbara Streisand
Freigeben: 2024-10-21 08:25:03
Original
303 Leute haben es durchsucht

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;
Nach dem Login kopieren

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 };
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!