Atualizado: 02/01/2025

Promise API - 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