В IISNODE приложение nodejs не может подключиться к перезапуску БД или отключению неактивного процесса - PullRequest
0 голосов
/ 28 июня 2019

По какой-то причине, по которой я не знаю, почему приложение узла не может переподключить БД после перезапуска. соединение может быть сделано после перезапуска приложения IISNode вручную. Ниже приведен мой файл server.js, который не нашел в нем ничего плохого;

const http = require('http');
var openHttpConnections = {};
var httpServer;
const dbOperationsWPool = require('./api/dbLib/dbOperationsWPool');

const compression = require('compression');
const helmet = require('helmet')
require('dotenv').config({
    path: __dirname + '\\mynode.env'
});
const dbPoolConfig = require("./dbPoolConfig");
const config = require('./config'); // get our config file
const bodyParser = require('body-parser');
var express = require('express'),
    cors = require('cors'),
    app = express();
// port = process.env.PORT || 4600;

const verifyToken = require('./api/lib/verifyToken');
app.use(helmet());
app.use(compression());
app.use(cors());
app.options('*', cors());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.set('superSecret', config.secret);

var authRoutes = require('./api/routes/authRoutes');
authRoutes(app); //register the route
var wsRoutes = require('./api/routes/wsRoutes');
wsRoutes(app);
// const wsVerifyToken = require('./api/lib/verifyWebServiceToken');
// app.use(wsVerifyToken);
app.use(verifyToken); // Yeri değiştirilmemeli. bu satırdan sonra oluşan routes token aranacaktır

const commonRoutes = require('./api/routes/commonRouter');
commonRoutes(app);
var izinRoutes = require('./api/routes/ikRoutes');
izinRoutes(app);

var satinalmaRoutes = require('./api/routes/satinalmaRoutes');
satinalmaRoutes(app);
var finansRoutes = require('./api/routes/finansRoutes');
finansRoutes(app);

var reportRoutes = require('./api/routes/reportRoutes');
reportRoutes(app);

app.use(handleError);
httpServer = http.Server(app);
app.use(function (req, res) {
    res.status(404).send({
        url: req.originalUrl + ' not found'
    })
});
httpServer.on('connection', function (conn) {
    var key = conn.remoteAddress + ':' + (conn.remotePort || '');
    openHttpConnections[key] = conn;
    conn.on('close', function () {
        delete openHttpConnections[key];
    });
});
httpServer.on('error', (err) => {
    console.log("Caught flash policy server socket error: ")
    console.log(err.stack)
});
/// create pool
dbOperationsWPool.createPool(dbPoolConfig).then(function () {
        // IS_NODE_PROD
        var port = 4900;
        if (process.env.IS_NODE_PROD === 'true' || process.env.IS_NODE_TEST === "true") {
            port = process.env.PORT;
        }

        httpServer.listen(port, function () {
            console.log('Webserver listening on localhost:' + port);
        });


    })
    .catch(function (err) {
        console.error('Error occurred creating database connection pool', err);
        console.log('Exiting process');
        process.exit(0);
    });

//app.listen(port);
//console.log('Onay RESTful API server started on: //' + port);



function handleError(err, req, res, next) {
    //console.error(err);
    res.status(500).send({
        error: 'Hata oluştu Erp yardım masasına başvurunuz'
    });
    shutdown(); //process would usually be restarted via something like https://github.com/foreverjs/forever
}

function shutdown() {
    console.log('Shutting down');
    dbOperationsWPool.terminatePool()
        .then(function () {
            console.log('node-oracledb connection pool terminated');
            console.log('Exiting process');
            process.exit(0);
        })
        .catch(function (err) {
            console.error('Error occurred while terminating node-oracledb connection pool', err);
            console.log('Exiting process');
            process.exit(0);
        });


    for (key in openHttpConnections) {
        openHttpConnections[key].destroy();
    }
}

единственная строка, которая может быть подозрительной, - это функция отключения, которая терминирует пул. Любая помощь приветствуется.

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