Простий посібник зі створення трекера цін на криптовалюти з використанням CoinGecko API, Node.js, MongoDB та EJS

текст перекладу
pic

Ми будуємо простий трекер цін на криптовалюту, який отримує дані в реальному часі для популярних криптовалют, таких як Bitcoin, Ethereum і Matic. Цей додаток використовуватиме Node.js, MongoDB та CoinGecko API для відображення поточних цін, змін за останні 24 години та ринкової капіталізації для кожної криптовалюти. Щоб інформація була актуальною, додаток автоматично отримуватиме оновлення кожні дві години.

Крім того, ми створимо зручний інтерфейс за допомогою EJS (Embedded JavaScript), щоб організовано представити дані.

Наприкінці цього посібника ви отримаєте повністю функціонуючий трекер цін на криптовалюту, який не лише надасть цінну інформацію про ринок, але й стане чудовою відправною точкою для подальших вдосконалень. Цей проєкт ідеально підходить для тих, хто хоче навчитися працювати з API та створювати веб-додатки. Почнемо!

Налаштування проєкту

  • Створіть нову директорію:
mkdir crypto-price-tracker  
cd crypto-price-tracker
  • Ініціалізуйте проєкт Node.js:
npm init -y

Це створить файл package.json з настройками за замовчуванням.

Встановлення необхідних пакетів

Встановіть необхідні пакети для вашого проєкту:

npm install express mongoose axios ejs dotenv node-cron
  • express: Веб-фреймворк для Node.js.
  • mongoose: ODM для MongoDB.
  • axios: HTTP клієнт для запитів до API.
  • ejs: Двигун шаблонів для рендерингу HTML.
  • dotenv: Для управління змінними середовища.
  • node-cron: Для планування завдань (наприклад, отримання даних кожні дві години).

Структура проєкту

crypto-price-tracker/

├── models/
│ └── Crypto.js
├── views/
│ └── index.ejs
├── .env
├── app.js
└── package.json

  • У models/Crypto.js створіть модель Mongoose для збереження даних про криптовалюти:
const mongoose = require('mongoose');  

const CryptoSchema = new mongoose.Schema({  
 name: String,  
 symbol: String,  
 price: Number,  
 marketCap: Number,  
 change24h: Number,  
 lastUpdated: Date,  
});  

module.exports = mongoose.model('Crypto', CryptoSchema);

Цей CryptoSchema від Mongoose визначає структуру для збереження даних про криптовалюти в базі даних MongoDB. Вона включає поля такі як name (назва криптовалюти), symbol (її абревіатура, наприклад BTC для Bitcoin), price (поточна ринкова ціна), marketCap (загальна ринкова капіталізація), change24h (зміна ціни за останні 24 години) і lastUpdated (час останнього оновлення). Кожне поле має визначений тип даних, наприклад String, Number або Date, що забезпечує послідовність введених даних. Ця схема діє як шаблон, що дозволяє розробникам ефективно створювати та керувати записами криптовалют.
текст перекладу
Схема експортується як модель з назвою Crypto для використання в усьому додатку.

  • У файлі app.js налаштуйте сервер Express, підключіть MongoDB і створіть маршрути:
require('dotenv').config();  
const express = require('express');  
const mongoose = require('mongoose');  
const axios = require('axios');  
const Crypto = require('./models/Crypto');  
const cron = require('node-cron');  

const app = express();  
const PORT = process.env.PORT || 3000;  

mongoose.connect(process.env.MONGO_URI, {  
 useNewUrlParser: true,  
 useUnifiedTopology: true,  
})  
.then(() => console.log('MongoDB connected'))  
.catch(err => console.error(err));  

app.set('view engine', 'ejs');  
app.use(express.static('public'));  

const fetchCryptoData = async () => {  
 try {  
 const response = await axios.get('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum,matic-network&vs_currencies=usd&include_24hr_change=true&include_market_cap=true');  
 const data = response.data;  

 for (let key in data) {  
 const cryptoData = {  
 name: key.charAt(0).toUpperCase() + key.slice(1),  
 symbol: key,  
 price: data[key].usd,  
 marketCap: data[key].usd_market_cap || 0,  
 change24h: data[key].usd_24h_change || 0,  
 lastUpdated: new Date(),  
 };  

 await Crypto.findOneAndUpdate({ symbol: key }, cryptoData, { upsert: true });  
 }  
 } catch (error) {  
 console.error('Error fetching data from CoinGecko:', error);  
 }  
};  

cron.schedule('0 */2 * * *', fetchCryptoData);  
fetchCryptoData();  

app.get('/', async (req, res) => {  
 const cryptos = await Crypto.find();  
 res.render('index', { cryptos });  
});  

app.listen(PORT, () => {  
 console.log(`Server is running on http://localhost:${PORT}`);  
});

Цей код налаштовує сервер Express, який отримує дані про криптовалюти з CoinGecko API кожні 2 години за допомогою node-cron. Дані зберігаються в базі даних MongoDB за допомогою Mongoose. Дані включають деталі криптовалют, такі як ціна, ринкова капіталізація та зміни за 24 години для Bitcoin, Ethereum і Matic. Сервер використовує EJS для рендерингу індексної сторінки, що відображає збережені дані про криптовалюти.
текст перекладу
Дані оновлюються в базі даних кожні 2 години, а перше отримання даних відбувається при старті сервера.

  • У файлі views/index.ejs створіть простий інтерфейс для відображення цін на криптовалюти:
<html>
<head>
  <title>Cryptocurrency Prices</title>
</head>
<body>
  <h1>Cryptocurrency Prices</h1>
  <table>
    <thead>
      <tr>
        <th>Name</th>
        <th>Symbol</th>
        <th>Price (USD)</th>
        <th>Market Cap</th>
        <th>24h Change (%)</th>
      </tr>
    </thead>
    <tbody>
      <% cryptos.forEach(crypto => { %>
        <tr>
          <td><%= crypto.name %></td>
          <td><%= crypto.symbol.toUpperCase() %></td>
          <td>$<%= crypto.price.toFixed(2) %></td>
          <td>$<%= crypto.marketCap.toFixed(2) %></td>
          <td><%= crypto.change24h.toFixed(2) %>%</td>
          <% if (crypto.change24h >= 0) { %>
            <td style="color: green;">▲</td>
          <% } else { %>
            <td style="color: red;">▼</td>
          <% } %>
        </tr>
      <% }) %>
    </tbody>
  </table>
</body>
</html>

Простий інтерфейс для відображення даних з API.

Крок за кроком: налаштування MongoDB

Щоб налаштувати новий кластер MongoDB Atlas і отримати рядок підключення, виконайте наступні кроки:

  • Створіть акаунт MongoDB Atlas: Зареєструйтесь або увійдіть на MongoDB Atlas.
  • Створіть новий кластер: Після входу натисніть на “Build a Cluster”, виберіть постачальника хмарних послуг, регіон та тип кластера. Натисніть “Create Cluster”.
  • Створіть користувача бази даних: Перейдіть на вкладку Database Access в лівій панелі. Натисніть “Add New Database User”, створіть користувача з ім'ям та паролем. Призначте користувачу відповідні дозволи.
  • Отримайте рядок підключення: Перейдіть на вкладку Clusters та натисніть кнопку “Connect” для вашого кластера. Виберіть “Connect your application”.
    текст перекладу
    Скопіюйте наданий рядок підключення та замініть `` на пароль вашого користувача бази даних.
  • Приклад рядка підключення:
mongodb+srv://<username>:<password>@cluster0.mongodb.net/pricetracker?retryWrites=true&w=majority
  • Використайте рядок підключення у вашому коді: Вставте рядок підключення у ваш код (наприклад, у файл .env).
  • Приклад запису в .env:
MONGO_URI=mongodb+srv://<username>:<password>@cluster0.mongodb.net/pricetracker?retryWrites=true&w=majority

Тепер ваш додаток буде підключено до вашого кластера MongoDB Atlas.

Запуск вашого додатку

node app.js
  • Доступ до вашого додатку:
    Відкрийте браузер і перейдіть за адресою http://localhost:3000, щоб побачити, як працює ваш трекер цін на криптовалюти.
  • Виведення

pic

Висновок

Тепер у вас є повноцінний трекер цін на криптовалюти, який отримує дані в реальному часі кожні дві години та відображає їх у зручному форматі за допомогою EJS. Ви можете розширити цей проект, додавши такі функції, як аутентифікація користувачів, сповіщення про зміни цін або додаткові криптовалюти. Успіхів у програмуванні!

Перекладено з: A Simple Guide to Creating a Crypto Price Tracker with CoinGecko API, Nodejs, MongoDb and EJS

Leave a Reply

Your email address will not be published. Required fields are marked *