Я хочу вставить количество посетителей в mysql БД в 23:59:59, но в моей БД есть неожиданные данные - PullRequest
0 голосов
/ 20 июня 2020

В настоящее время я начал веб-разработку. Но есть некоторые проблемы. Я хочу вставить общее количество посетителей, которые посещают мой сайт с 0: 0: 0 до 23:59:59. Но в моей таблице mysql DB уже вставлены неожиданные данные. Например, данные должны быть вставлены в БД после 23:59:59 20 июня, но по какой-то причине нежелательные данные продолжают вставляться в данные, как если бы это было 3 июля. Я сделал ошибку в коде?

Вот мой node.js код. Установил все необходимые модули.

app.get('/', (req, res) => {
    var date = new Date();
    let year = date.getFullYear();
    let month = date.getMonth();
    let day = date.getDate();
    var today = year + " " + month + " " + day;

    var j = schedule.scheduleJob({ hour: 23, minute: 59, second: 1 }, function () {
            console.log(year + " " + month + " " + day);
            connection.query(
                `INSERT INTO visiter VALUES (${year}, ${month + 1},${day}, ${count});`
            );
            count = 0;
    });

    console.log(req.session.lastVisit);
    if (req.session.lastVisit != today) {
        req.session.lastVisit = today;
        count++;
    }

    fs.readFile(path.join(__dirname, 'html', 'index.html'), (err, data) => {
        try {
            res.writeHead(200, { 'Content-Type': 'text/html' });
            console.log(count);
            res.end(data);
        } catch (err) {
            res.writeHead(404, () => {
                console.log("Page Not Found!")
            });
        }
    })
});

1 Ответ

0 голосов
/ 20 июня 2020

Попробуйте сделать свой планировщик вне маршрута, в вашем примере ваш планировщик будет запускаться каждый раз при попадании в маршрут, что не требуется,

Например,

_count = 0;
function scheduleDatabaseWrite() {
    const { year, month, day, today } = GetCurrentDateMonthYear();
    schedule.scheduleJob({ hour: 23, minute: 59, second: 1 }, () => {
        connection.query(
            `INSERT INTO visiter VALUES (${year}, ${month + 1},${day}, ${count});`
        );
        _count = 0; //And do this re-initialization only if the database write is success 
    });
}

function GetCurrentDateMonthYear() {
    var date = new Date();
    let year = date.getFullYear();
    let month = date.getMonth(); // also you might need to check this logic as well, you want js month index or real world number, date.getMonth() - will return value starting from 0 and end's at 11, if you want 1 - 12 then add 1 to it, like date.getMonth()+1
    let day = date.getDate(); 
    var today = year + " " + month + " " + day;
    return { year, month, day, today };
}

scheduleDatabaseWrite();

p.get('/', (req, res) => {
    const { year, month, day, today } = GetCurrentDateMonthYear();
    console.log(req.session.lastVisit);
    if (req.session.lastVisit != today) {
        req.session.lastVisit = today;
        _count++;
    }

    fs.readFile(path.join(__dirname, 'html', 'index.html'), (err, data) => {
        try {
            res.writeHead(200, { 'Content-Type': 'text/html' });
            console.log(count);
            res.end(data);
        } catch (err) {
            res.writeHead(404, () => {
                console.log("Page Not Found!")
            });
        }
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...