Загрузка количество просмотров на странице из файл json, Node.js

По заданию необходимо было: Напишите HTTP сервер на express и реализуйте два обработчика “/” и “/about”, где:

— На каждой странице реализован счетчик просмотров — Значение счетчика необходимо сохранять в файл каждый раз, когда обновляется страница — Также значение счетчика должно загружаться из файла, когда запускается обработчик страницы — Таким образом счетчик не должен обнуляться каждый раз, когда перезапускается сервер.

Смог реализовать счетчик просмотров, который сохраняет данные в файл json (где в объекте ключом будет являться URL страницы, а значением количество просмотров страницы).

const express = require('express');
const fs = require('fs');
const path = require('path');

const app = express();

let userCountHome = 0;
let userCountAbout = 0;

app.get('/', (req, res) => {
    userCountHome++;
    const userCountHomeJson = {
        key: "/",
        count: userCountHome
    };

    fs.writeFileSync(path.join(__dirname, 'userCountHomeJson.json'), JSON.stringify(userCountHomeJson, null, 2));
    
    res.send(`<h1>Главная страница сайта</h1><p>Просмотров: ${userCountHome}</p><a href="/about">Ссылка на страницу обо мее</a>`);
});

app.get('/about', (req, res) => {
    userCountAbout++;
    const userCountAboutJson = {
        key: "/about",
        count: userCountAbout
    };

    fs.writeFileSync(path.join(__dirname, 'userCountAboutJson.json'), JSON.stringify(userCountAboutJson, null, 2));

    res.send(`<h1>Страница обо мне</h1><p>Просмотров: ${userCountAbout}</p><a href="/">Ссылка на главную страницу</a>`);
});

const port = 3000;

app.listen(port, () => {
    console.log(`Сервер запущен на порту ${port}`);
});

Как сделать так, что-бы при перезапуске сервера счетчик не обнулялся?


Ответы (1 шт):

Автор решения: Олег Остапов

Решил данную задачу следующим образом

const express = require('express');
const fs = require('fs');
const path = require('path');

const app = express();

app.get('/', (req, res) => {
    
    const pathToFileHome = path.join(__dirname, 'userCountHome.json');
    const userCountHomeData = JSON.parse(fs.readFileSync(pathToFileHome, 'utf-8'));

    userCountHomeData.count = userCountHomeData.count + 1;

    fs.writeFileSync(pathToFileHome, JSON.stringify(userCountHomeData, null, 2));

    res.send(`<h1>Главная страница сайта</h1><p>Просмотров: ${userCountHomeData.count}</p><a href="/about">Ссылка на страницу обо мее</a>`);
});

app.get('/about', (req, res) => {

    const pathToFileAbout = path.join(__dirname, 'userCountAbout.json');
    const userCountAboutData = JSON.parse(fs.readFileSync(pathToFileAbout, 'utf-8'));

    userCountAboutData.count = userCountAboutData.count + 1;

    fs.writeFileSync(pathToFileAbout, JSON.stringify(userCountAboutData, null, 2));

    res.send(`<h1>Страница сайта Обо Мне</h1><p>Просмотров: ${userCountAboutData.count}</p><a href="/">Ссылка на главную страницу</a>`);
});

const port = 3000;

app.listen(port, () => {
    console.log(`Сервер запущен на порту ${port}`);
});

→ Ссылка