Я сталкиваюсь с запросом 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()