Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

167
Vistas
servidor http responde con una salida de una función asíncrona

Quiero que mi script de respuesta http responda con datos de mi servidor SQL. Entonces puedo usar AJAX para actualizar HTML con datos de mi servidor SQL. Y no puedo encontrar una manera de hacer esto. Estoy aprendiendo sobre async y tengo la sensación de que si puedo guardar el resultado de mi función async en una var global, entonces funcionará. Cualquier ayuda me ahorraría el dolor de cabeza.

Mi script de escucha simple es:

 var test = "hello!" var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(test); res.end(); }).listen(8080);

y mi codigo sql es:

 const util = require('util'); var mysql = require('mysql'); var con = mysql.createConnection({ host: "XXXXX", user: "XXXXX", password: "XXXXX", database: "XXX" }); var DBresult=null; function getdb(){ const query = util.promisify(con.query).bind(con); (async () => { try { const rows = await query('SELECT * FROM mylist'); DBresult=rows; } finally { con.end(); } })() }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

NO use variables globales o compartidas de mayor alcance para su resultado asíncrono en un servidor. Nunca hagas eso. Ese es un antipatrón por una buena razón porque puede crear problemas de concurrencia intermitente porque más de una solicitud puede estar en proceso al mismo tiempo en su servidor, por lo que esto causaría un acceso conflictivo a esas variables, creando problemas intermitentes, muy difíciles de -Problemas de depuración. Vuelvo a repetir, NUNCA.

No describió una situación exacta para la que está tratando de escribir código, pero aquí hay un ejemplo.

En su lugar, utiliza el resultado dentro del contexto en el que llega de su llamada asincrónica. Si puede usar await , eso generalmente hace que la codificación sea más limpia.

Aquí hay un ejemplo simple:

 const con = mysql.createConnection({ host: "XXXXX", user: "XXXXX", password: "XXXXX", database: "XXX" }); const query = util.promisify(con.query).bind(con); http.createServer(async function(req, res) { if (req.path === "/query" && req.method === "GET") { try { const rows = await query('SELECT * FROM mylist'); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(rows)); } catch(e) { console.log(e); res.statusCode = 500; res.end(); } } else { // some other respone res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write("hello"); res.end(); } }).listen(8080);

Cosas a tener en cuenta aquí:

  1. Verificando tanto la ruta como el método antes de manejar la solicitud.
  2. Hacer que la función de devolución de llamada sea async para que pueda usar await .
  3. Asegurarse de que cualquier rechazo de promesa de await sea detectado por try/catch y se envíe una respuesta de error si hay un error.
  4. Enviando el resultado como JSON y configurando el tipo de contenido apropiado.
  5. Puede estar usando el módulo http simple como una experiencia de aprendizaje, pero pronto descubrirá que usar el marco Express simple le ahorrará mucho tiempo de programación y facilitará mucho las cosas.
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda