Ich stieß auf einen mysql-Verbindungsfehler, den ich anscheinend durch das Erraten eines JS-Variablenbereichsfehlers behoben habe.JS variabler Bereich in Hapi JS Route-Handler
Im Route-Handler habe ich den Code auskommentiert, der den folgenden MySQL-Fehler ausgelöst hat: PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR
, und den folgenden Arbeitscode enthalten.
require('dotenv').config();
const Hapi = require('hapi');
const mysql = require('mysql');
const Joi = require('joi');
const query = require('./lib/mysql/query');
const server = new Hapi.Server();
server.connection({
host: process.env.SERVER_HOST,
port: process.env.SERVER_PORT
});
const dbOne = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER_ONE,
password: process.env.DB_PASSWORD_ONE
});
const dbTwo = mysql.createConnection({
host: process.env.DB_HOST_TEST,
user: process.env.DB_USER_TWO,
password: process.env.DB_PASSWORD_TWO,
});
server.route({
method: 'GET',
path:'/my-route',
config: {
validate: {
query: {
useDatabase2: Joi.valid('true'),
},
},
},
handler: (req, reply) => {
const useDatabase2 = req.query.useDatabase2 === 'true';
// This didn't work...
/*
const db = useDatabase2 ? dbTwo : dbOne;
db.query(query, (err, rows) => {
if (err) {
reply({
statusCode: 500,
error: "Internal Server Error",
message: err,
}).code(500);
} else {
// ...do something with the data
}
});
*/
// This works...
if (useDatabase2) {
dbTwo.query(query, (err, rows) => {
if (err) {
reply({
statusCode: 500,
error: "Internal Server Error",
message: err,
}).code(500);
} else {
// ...do something with the data
}
});
} else {
dbOne.query(query, (err, rows) => {
if (err) {
reply({
statusCode: 500,
error: "Internal Server Error",
message: err,
}).code(500);
} else {
// ...do something with the data
}
});
}
}
});
server.start(err => {
if (err) throw err;
});
Ich hatte angenommen, dass const db
war nur ein Verweis auf die ursprüngliche Variable (dbOne oder dbTwo) innerhalb seiner eigenen Anwendungsbereich und hörte am Ende jeder Anfrage zu existieren.
Ist die db
Variable wirklich in Konflikt mit sich selbst und verursacht die MySQL-Verbindung fehlschlagen?