Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Promise API em Node.js

O driver MySQL2 permite o uso de Promise ao executar consultas no banco de dados. Por exemplo:

const mysql = require("mysql2");

const connection = mysql
  .createConnection({
    host: "localhost",
    user: "root",
    database: "usersdb2",
    password: "123456",
  })
  .promise();

// obtenção de objetos
connection
  .query("SELECT * FROM users")
  .then((result) => {
    console.log(result);
  })
  .catch((err) => {
    console.log(err);
  });

Para criar uma Promise ao criar o objeto connection, o método promise() é chamado. Em seguida, ao realizar a consulta utilizando o método query(), podemos encadear os métodos then() e catch().

Se ocorrer um erro durante a execução da consulta, o método catch() executa a função passada como parâmetro. Essa função recebe um parâmetro, que é o objeto de erro.

Se a consulta for bem-sucedida, o método then() é chamado e executa a função fornecida como parâmetro. Esta função recebe como parâmetro o resultado da consulta. O resultado pode variar dependendo da instrução SQL enviada ao servidor.

Para a instrução SELECT, o resultado da consulta é um array de dois objetos, onde o primeiro objeto contém os dados retornados do banco de dados em forma de array, e o segundo contém metadados dos campos. Podemos acessar os dados diretamente da seguinte forma:

connection
  .query("SELECT * FROM users")
  .then((result) => {
    console.log(result[0]);
  })
  .catch((err) => {
    console.log(err);
  });

Ou assim:

connection
  .query("SELECT * FROM users")
  .then(([rows, fields]) => {
    console.log(rows);
  })
  .catch((err) => {
    console.log(err);
  });

O output no console em ambos os casos será algo como:

C:\node\mysqlapp> node app.js
[ TextRow { id: 2, name: 'Tom', age: 34 },
  TextRow { id: 4, name: 'Alice', age: 25 },
  TextRow { id: 5, name: 'Kate', age: 28 },
  TextRow { id: 6, name: 'Tim', age: 22 },
  TextRow { id: 7, name: 'Tom', age: 34 },
  TextRow { id: 8, name: 'Helen', age: 28 },
  TextRow { id: 9, name: 'Bill', age: 25 } ]

Se a instrução SQL for INSERT, UPDATE ou DELETE, o resultado da consulta será um objeto cujas propriedades descrevem o resultado da operação:

const mysql = require("mysql2");

const connection = mysql
  .createConnection({
    host: "localhost",
    user: "root",
    database: "usersdb2",
    password: "123456",
  })
  .promise();

const sql = "INSERT INTO users (name, age) VALUES (?, ?)";
const user = ["Stan", 19];
connection
  .query(sql, user)
  .then((result) => {
    console.log(result[0]);
  })
  .catch((err) => {
    console.log(err);
  });

O resultado da consulta é um array de dois objetos, onde o primeiro elemento descreve os resultados da operação. Neste caso, o output no console será algo como:

C:\node\mysqlapp> node app.js
ResultSetHeader {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 11,
  info: '',
  serverStatus: 2,
  warningStatus: 0 }

Por exemplo, com a propriedade affectedRows do objeto resultante, podemos obter o número de linhas afetadas pela operação (adicionadas/excluídas/atualizadas).

Tudo o que foi mencionado sobre o método query() também se aplica ao método execute(), que funciona de maneira semelhante:

connection
  .execute("SELECT * FROM users")
  .then(([rows, fields]) => {
    console.log(rows);
  })
  .catch((err) => {
    console.log(err);
  });
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com