Maison >interface Web >js tutoriel >Système d'enchères en ligne pour la semaine du Hacktoberfest

Système d'enchères en ligne pour la semaine du Hacktoberfest

Barbara Streisand
Barbara Streisandoriginal
2024-10-21 08:25:03425parcourir

Hacktoberfest week Online Auction System

Aperçu

Au cours de la troisième semaine du Hacktoberfest, j'ai décidé de contribuer à un projet plus petit mais prometteur : un système d'enchères en ligne. Bien que le projet en soit encore à ses débuts, il montre déjà un potentiel de croissance et j'ai vu une opportunité d'aider à améliorer sa base de code. Ma tâche consistait à refactoriser le projet en réduisant le code redondant et en améliorant la structure globale, le rendant plus maintenable et évolutif.

Ma tâche

L'objectif principal de ma tâche était d'identifier les modèles de code répétitifs et de les refactoriser pour rendre la base de code plus propre et plus facile à maintenir. La redondance du code peut entraîner des incohérences, rendre les futures mises à jour plus difficiles et augmenter le risque de bogues. En rationalisant le code, je visais à améliorer l'efficacité sans altérer les fonctionnalités.

Changements clés :

1. Gestion centralisée des erreurs asynchrones : L'un des problèmes courants dans les projets Express.js concerne les blocs try-catch répétitifs pour la gestion des erreurs dans les routes asynchrones. Pour résoudre ce problème, j'ai introduit une fonction utilitaire appelée asyncHandler qui englobe toutes les fonctions asynchrones, garantissant que toutes les erreurs sont automatiquement détectées et traitées de manière cohérente dans toute l'application.

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

Ce changement a non seulement supprimé les blocs try-catch redondants, mais a également rendu le code plus propre et plus axé sur la logique métier, plutôt que sur la gestion des erreurs.

2. Fonctions de l'utilitaire de base de données : Le projet comportait plusieurs itinéraires qui interagissaient directement avec la base de données, répétant souvent des requêtes similaires. Pour réduire la redondance, j'ai créé un ensemble de fonctions utilitaires réutilisables pour gérer les requêtes de base de données courantes, telles que la récupération des informations d'un acheteur ou la récupération de transactions.

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

Désormais, au lieu d'écrire des requêtes SQL directement dans chaque route, la base de code peut s'appuyer sur ces fonctions utilitaires, réduisant ainsi la duplication et rendant la logique plus facile à gérer.

3. Gestion unifiée des réponses : Un autre domaine d'amélioration était la gestion des réponses. Différentes routes présentaient des modèles incohérents pour l’envoi de réponses de réussite et d’erreur. Pour standardiser cela, j'ai introduit des fonctions utilitaires telles que send404, send500 et sendSuccess.

Discussion

Comme le projet n'en est qu'à ses débuts, j'ai remarqué certaines routes manquantes comme POST, DELETE et PUT que j'aurais facilement pu créer. Cependant, j'ai décidé de m'en tenir uniquement à mon problème.

Faites-moi savoir dans les commentaires, comment gérez-vous habituellement ce genre de situations pour lesquelles vous pourriez contribuer davantage... Ouvrez-vous un nouveau numéro, est-ce que vous le créez simplement et faites une Pull Request ? J'aimerais lire votre expérience.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn