Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
Cómo implementar un grupo de conexiones de promesa-mysql en Electron

Mi proyecto es una aplicación Electron de tamaño mediano, y usopromise-mysql para llegar al back-end. Si bien hay varios buenos ejemplos que cubren cómo conectarse a MySQL en Electron, ninguno que he encontrado usa un grupo de conexiones.

El servidor de base de datos que estoy usando es muy pequeño (un NUC) , por lo que deseo usar un grupo de conexiones para controlar las cosas. Me parece que el lugar natural para instanciar el grupo de conexiones sería el archivo main.js de Electron justo antes de que la aplicación abra la ventana. Esto es para que todos los renderizadores puedan acceder a él. Para obtener y liberar conexiones, escribí controladores ipc como este:

 // MySQL setup const ipc = require('electron').ipcMain; var mysql = require('promise-mysql'); var mysqlParms = require("./mysqlConfig.json"); let cfMySQLPool = mysql.createPool({ host: mysqlParms.host, user: mysqlParms.user, password: mysqlParms.password, database: mysqlParms.database, multipleStatements: true, connectionLimit: 4 // NUC is a small box }); ipc.on('getCFConnection', function (event, arg) { event.sender.send('cfConnection', cfMySQLPool.getConnection()); // send a connection Promise }) ipc.on('releaseCFConnection', function (event, cfConnection) { cfMySQLPool.releaseConnection(cfConnection); // release the connection from the pool })

Sin embargo, esto falla. Los renderizadores no reciben la Promesa de getConnection(), y creo que descubrí por qué. Cuando event.sender.send (que es webcontents.send ) pasa el argumento, los documentos indican:

"Los argumentos se serializarán en JSON internamente y, por lo tanto, no se incluirán funciones ni cadenas de prototipos".

Por lo tanto, parece que la serialización JSON elimina la capacidad de .then() la promesa getConnection en el renderizador.

¿Alguien tiene alguna solución para ofrecer sobre la implementación del grupo de conexiones de Promise-mysql en Electron para que cualquier renderizador pueda llamar a getConnection / releaseConnection en él? Gracias.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Si bien esta ES una respuesta a la pregunta "Cómo implementar...", seguramente deseo y espero que mi respuesta no termine siendo la aceptada. Esperaré por un tiempo para ver si uno de ustedes, cerebritos, se le ocurre algo mejor.

Pero una forma de implementar el grupo de conexiones de promise-mysql es simplemente "ceder" y no solo tener el main.js de Electron instanciando el grupo, sino también hacer que main.js ejecute todas sus Promesas de proceso de MySQL también.

En el lado del renderizador, todo lo que se necesita es una solicitud de IPCRenderer para iniciar el proceso. Main.js luego responde ejecutando la propia cadena Promise. Aquí hay un ping simple:

 // process 1: ping MySQL server to see if its up; oParms not used ipc.on('_mp1', function (event, oParms) { let localConn = null; cfMySQLPool.getConnection().then((conn) => { localConn = conn; localConn.ping((err) => { cfMySQLPool.releaseConnection(localConn); if (err) { event.sender.send("mp1_", {error: null, result: false}); } else { event.sender.send("mp1_", {error: null, result: true}); } }) .catch((err) => { event.sender.send("mp1_", {error: err, result: null}); }); }); });

Los resultados del método query() , cuyo retorno es simplemente una matriz de datos de campo resultantes, no se ven afectados por la serialización JSON interna de Electron; no hay funciones / prototipo para eliminar. Liberar la conexión de nuevo al grupo y enviar los datos al procesador solicitante es fácil y completa el proceso.

Entonces, en retrospectiva, este problema en realidad tiene menos que ver con promise-mysql y más sobre por qué Electron no puede pasar objetos "ricos" con funciones intactas a los renderizadores a través de IPC. La implementación alternativa resultante genera MUCHO manejo innecesario de IPC.

¿A menos que alguien vea las cosas de manera diferente...?

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!