npm cron blocking Express. JS HTTP-запросы - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь использовать модуль cron из npm в моем приложении Express. js.

Структура приложения довольно проста, У меня есть функция для подключения к базе данных, и там я регистрирую все различные модули, которые обрабатывают запросы HTTP, что-то вроде этого:

import { Router } from 'express';
export default ({ config }) => {
    let api = Router();

    connectAllDbs(config, ({mysql}) => {

        userModule({api, config, mysql});
        // other modules...
    });

    return api;
};

Теперь я написал крон и добавил его после этих HTTP модули загружаются, так как это также зависит от соединения с базой данных

const cron = new CronJob('* */30 * * *', () => {
    // do stuff w/ mysql
});
cron.start();

При этом добавлении некоторые HTTP-запросы к серверу узлов случайным образом 'ожидают' в браузере

pending http request

Я начал читать о дочерних процессах и рабочих потоках , но они кажутся трудными, поскольку внешние Теперь файл находится за пределами моей красивой базы кода с поддержкой babel, поэтому мне нужно выяснить, какой пакет voodoo в пакете. json, чтобы получить скрипт вне индекса. js для прохождения всего этого ...

Это ожидаемое поведение с модулем cron? Я не видел ничего на README или известных проблемах; Я удивлен, что никто больше не сталкивался с этим, что заставляет меня думать, что я делаю что-то не так - есть идеи, что это может быть?

1 Ответ

0 голосов
/ 29 января 2020

Я придумала одно решение, которое использует child_process.spawn .

Чтобы справиться с необходимостью от go до npm, чтобы использовать настройки babel без необходимости создавать другое точка входа (добавляя scripts записей в пакет. json), я создал условный блок в существующем сценарии точки входа (index. js), что-то вроде

//--------------------------------------------------
// Run the CRON
//--------------------------------------------------
if(process.argv.includes('cron')) {
    runCron();
}
//--------------------------------------------------
// Handle HTTP requests
//--------------------------------------------------
else {
    // Start express -------------------------------
    let app = express();
    app.server = http.createServer(app);

    // Fork the cron process -----------------------
    const spawned = spawn('npm', ['run', 'cron']);
}

Я бы предпочитаю иметь вторую точку входа, но не сразу знаю, как это сделать, так что это было для меня самым простым решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...