Nodejs Соединение MySQL2 Обработка получения запроса undefined иногда при соединении с Google sql - PullRequest
0 голосов
/ 19 июня 2020

Я сталкиваюсь с запросом undefined при попытке запросить базу данных с использованием библиотеки mysql2 в nodejs.

Вот мой фрагмент кода.


"use strict";
const mysql = require('mysql2');
const flavours = require('./config.' + process.env.NODE_ENV);
const redis = require('redis');
const promise = require('bluebird');
const secrets = require('./secrets');
//const { appDbConfig } = require('./config.development');



promise.promisifyAll(redis.RedisClient.prototype);
promise.promisifyAll(redis.Multi.prototype);

/**DB used is CloudSQL**/

//const poolPromise = mysql.createPool(flavours.appDbConfig).promise();
const redisClient = redis.createClient(flavours.appRedisConfig);

let poolPromise;
let nodeKey;
let encryptionKey;
async function initDb(){
  console.time('Loading-Secret');

  console.timeEnd('Loading-Secret');

  if(process.env.NODE_ENV === 'development'){
    const password = '';
    nodeKey = '';
    encryptionKey = '';
    flavours.appDbConfig.password = password;
  }

  else {
    const password = await secrets.getSecrets(flavours.secretPass);
    nodeKey = await secrets.getSecrets(flavours.nodeKey);
    encryptionKey = await secrets.getSecrets(flavours.encryptionKey);
    flavours.appDbConfig.password = password;
  }
  //load secrets
  // appDbConfig.password = 'secret
 // console.log('APp DB configuration', flavours.appDbConfig)
  poolPromise = mysql.createPool(flavours.appDbConfig).promise();
  //console.log('Loading Pool Promise ', poolPromise);
  return poolPromise
}
 function appDb(){
   console.log('APp DB')
   return poolPromise
 }

 function getSecrets(){
 return {nodeKey, encryptionKey}
 }

module.exports = {
  initDb,
  appDb,
  apiBaseURL: '/test',
  appRedis: redisClient,          // configure unique API root path
  ghBaseURL: flavours.ghBaseURL,
  encryptionAlgorithm: flavours.encryptionAlgorithm,
  getSecrets
};

В моем index. js, в конце я вызываю await intiDB (), поэтому, когда приложение запускается, секреты загружаются и создают пул db.

const bodyParser = require('body-parser');
const {initDb} = require('./Config/config');
const { apiBaseURL } = require('./Config/config');
const { handleError } = require('./ErrorUtils/error');
const statusCodes = require('../src/ErrorUtils/statusCodes');
const statusMessages = require('../src/ErrorUtils/statusMessages');


const index = async(express) => {
  express.use(bodyParser.json({type: 'application/json'}));
  express.use(bodyParser.urlencoded({extended : true}))
  express.use((req,res, next) => {
    res.setHeader('Content-Type', 'application/json');
    return next();
  })
  express.use(apiBaseURL,
    require('./Transaction/Transaction.Main'),
    require('./Quota/Quota.Main'),
    require('./Login/Login.Main'),
    require('./Test/Test.Main')
  );

  express.use((err, req, res, next) => {
    handleError(err, res);
  })

  express.use((req, res, next) => {
    if (!req.route)
      return res.status(statusCodes.HTTP_4XX_NOT_FOUND).send({ message: statusMessages.INTERNAL_NOT_FOUND });
  })
  try{
  await initDb();
  console.log('Checking DB connections');
  // const res = await db.query('select 1+1 as result')
  // console.log('The result of the query is ', res);
  } catch(error){
    console.log('Error in index ', error);
    process.exit(1)
  }
}

module.exports = index;

В моем уровне репозитория loginRepository. js, вторая строка Вызов appDB (). query иногда приводит к ошибочному запросу undefined. Что мне здесь не хватает. Пожалуйста, помогите мне.

const { appDb } = require('../Config/config');
[result] = await appDb().query()
...