javascript - Node Express-server avslutas åtta timmar efter inaktivitet


Jag har skrivit en liten backend-applikation med Node Express. Dess syfte är att hämta data från en MySQL-databas och skicka de resulterande raderna som en JSON-formaterad sträng tillbaka till den begärande klienten.

app.get(`${baseUrl}/data`, (req, res) => {
    console.log("Get data");
    getDataFromDatabase((error, data) => {
        if (error) {
             return res.json({status: CODE_ERROR, content: error});
        }
        else {
            return res.json({status: CODE_SUCCESS, content: data});
        }
    });

});

Inuti getDataFromDatabase()-metoden skickas ett enkelt SELECT-kommando till databasen och den får en statuskod samt innehåll. Vid framgång skulle innehållet vara en JSON med de returnerade raderna, annars information om MySQL-felet - återigen i JSON-format.

I princip fungerar denna kod bra. Det finns några andra metoder som byggdes på samma sätt men som inte orsakar följande problem: Efter att ha kört denna kod på en server upptäckte jag att processen alltid dör exakt åtta timmar efter det sista anropet av ovanstående metod. Metoden kan anropas dussintals gånger, problemet uppstår endast efter inaktivitet.

En snabb och smutsig lösning på grund av brist på tid var helt enkelt att skapa ett cronjobb som avslutar processen och kör om applikationen var sjätte timme. Däremot avslutas även den nya processen åtta timmar efter att den senaste förfrågan har skickats i den sista processen.

Medan jag skrev denna fråga, kollade jag igen efter eventuella skillnader mellan mina metoder. Jag fann följande, här är ett utdrag av getDataFromDatabase():

if (error) {
    callback(error, null);
}

Men en metod getOtherDataFromDatabase() har fått ett return-nyckelord före sin callback:

if(!error) {
    return callback(null, data);
}

Så, gör return-nyckelordet någon skillnad här? Finns det någon sorts ofullständig asynkron kod som avslutas efter en timeout? Jag har inga undantag i min konsolutmatning, processen dör tyst.