«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Система онлайн-аукционов недели Хактоберфеста

Система онлайн-аукционов недели Хактоберфеста

Опубликовано 6 ноября 2024 г.
Просматривать:749

Hacktoberfest week Online Auction System

Обзор

Во время третьей недели Хактоберфеста я решил внести свой вклад в небольшой, но многообещающий проект: систему онлайн-аукционов. Хотя проект все еще находится на ранней стадии, он уже демонстрирует потенциал для роста, и я увидел возможность помочь улучшить его кодовую базу. Моей задачей было провести рефакторинг проекта, сократив избыточный код и улучшив общую структуру, сделав его более удобным в сопровождении и масштабируемом.

Моя задача

Основной целью моей задачи было выявление повторяющихся шаблонов кода и их рефакторинг, чтобы сделать кодовую базу более чистой и простой в обслуживании. Избыточность кода может привести к несогласованности, затруднить будущие обновления и увеличить вероятность ошибок. Оптимизируя код, я стремился повысить эффективность без изменения функциональности.

Ключевые изменения:

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 = $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 };

Теперь вместо написания SQL-запросов непосредственно в каждом маршруте база кода может полагаться на эти служебные функции, что уменьшает дублирование и упрощает управление логикой.

3. Унифицированная обработка ответов: Еще одной областью улучшений стала обработка ответов. Различные маршруты имели противоречивые шаблоны отправки ответов об успехе и ошибках. Чтобы стандартизировать это, я представил служебные функции, такие как send404, send500 и sendSuccess.

Обсуждение

Поскольку проект все еще находится на ранней стадии, я заметил некоторые недостающие маршруты, такие как POST, DELETE и PUT, которые я мог бы легко создать. Однако я решил ограничиться только тем, о чем спрашивал.

Дайте мне знать в комментариях, как вы обычно справляетесь с подобными ситуациями, чтобы вы могли внести дополнительный вклад... Вы открываете новую задачу, просто создаете ее и делаете запрос на включение? Мне бы очень хотелось прочитать ваш опыт.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/htsagara/hacktoberfest-week-3-online-auction-system-4knp?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3