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

536
Views
¿El método de conexión en el módulo NPM mysql está bloqueando?

La documentación oficial del paquete mysql NPM para Node.js ( aquí ) hace la siguiente sugerencia para conectarse a una base de datos y ejecutar una consulta básica:

 var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); }); connection.end();

El método de conexión también toma una función de devolución de llamada opcional, y la documentación proporciona el siguiente ejemplo de ese uso (ignore los comentarios en el ejemplo a continuación; este ejemplo en realidad está tratando de demostrar algo más):

 var connection = require('mysql').createConnection({ port: 84943, // WRONG PORT }); connection.connect(function(err) { console.log(err.code); // 'ECONNREFUSED' console.log(err.fatal); // true }); connection.query('SELECT 1', function (error, results, fields) { console.log(error.code); // 'ECONNREFUSED' console.log(error.fatal); // true });

En ambos casos, el método de consulta se llama después del método de conexión y no , como cabría esperar, dentro de la devolución de llamada del método de conexión. Esto parece implicar que el método de conexión está bloqueando (es decir, sincrónico).

Así que tengo una pregunta simple, seguida de algunas preguntas más matizadas:

¿El método de connect en el módulo NPM mysql está bloqueando?

Si es así, ¿no va esto en contra de la convención Node? ¿No sería la convención hacer una consulta dentro de la devolución de llamada pasada al método de connect ?

Finalmente, si el método de conexión está bloqueando y va en contra de la convención de Node, ¿por qué los diseñadores del módulo mysql decidieron hacer el bloqueo de connect ? ¿Cuáles son las ventajas de este enfoque? Como el paquete mysql Node.js más popular, estoy seguro de que hubo una razón por la que se tomó este enfoque.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

¡Buena pregunta!

De la documentación, infiero que todas las consultas que realiza se ponen en cola internamente.

Cuando llamas a connection.connect() , comenzará (asincrónicamente) a configurar la conexión con el servidor y también inicializará una cola de consultas donde todas las consultas que deseas ejecutar (llamando a connection.query() ) hacer cola.

Una vez establecida la conexión real, realizará las consultas en cola.

Algo similar sucede con connection.end() : "... se asegurará de que todas las consultas previamente puestas en cola aún se [realicen] antes de enviar un paquete COM_QUIT al servidor MySQL" ( fuente ).

Por lo tanto, puede parecer que ambos métodos están bloqueando (sincrónicos), pero en realidad no lo están.

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!