Node
Tutorial Node: Creación de consultas básicas (CRUD) sin ORM
Node.js: Aprende a realizar consultas asíncronas a MySQL. Explota async/await para mejorar el rendimiento y seguridad. Guía completa y actualizada.
Aprende Node GRATIS y certifícateConsultas SELECT a MySQL desde nodejs
Para extraer información de una tabla es habitual usar la instrucción SELECT, ya que permite recuperar registros concretos o incluso todas las filas de una misma entidad. Resulta útil combinar este comando con condiciones en su cláusula WHERE para acotar la búsqueda de resultados.
La ejecución asincrónica de la consulta es fundamental, pues Node.js aprovecha su modelo de ejecución no bloqueante para procesar otras tareas mientras se realiza la operación en la base de datos. Este enfoque mejora la capacidad de respuesta y evita bloqueos en el hilo principal.
A la hora de establecer la consulta, se recomienda utilizar placeholders que faciliten la inserción de valores seguros, minimizando riesgos de inyección y asegurando un mantenimiento más ordenado. Un esquema básico combina el comando SQL con los valores adecuados para cada placeholder.
Aquí se muestra un ejemplo con async/await y el método execute para un SELECT genérico:
async function getEmployees(filter = {}) {
try {
let query = "SELECT * FROM employees";
let params = [];
if (filter.id) {
query += " WHERE id = ?";
params.push(filter.id);
}
const [rows] = await connection.execute(query, params);
return rows;
} catch (error) {
console.error("Error get employees: ", error);
}
}
console.log(await getEmployees());
console.log(await getEmployees({ id: 1 }));
Es útil tener en cuenta que la gestión de resultados se basa en estructuras tipo array, donde cada elemento representa un registro. Esto permite recorrer el conjunto de datos con técnicas habituales de JavaScript como map, for...of o incluso transformaciones más complejas para satisfacer los requisitos de la aplicación.
Consultas INSERT a MySQL desde nodejs
La instrucción INSERT permite añadir nuevos registros a una tabla y resulta esencial para gestionar datos que se recogen en aplicaciones basadas en Node.js. Al trabajar con un entorno asincrónico, conviene garantizar que la ejecución de la inserción no bloquee el hilo principal, aprovechando los métodos que la librería de MySQL ofrece.
Para ejecutar una sentencia de inserción de forma segura, es recomendable combinar placeholders y valores dinámicos, evitando así riesgos de inyección SQL. A continuación, se presenta un ejemplo sencillo en el que se utilizan placeholders:
async function insertEmployee(employee) {
try {
const [rows] = await connection.execute(
"INSERT INTO employees (name, stand, salary) VALUES (?, ?, ?)",
[employee.name, employee.stand, employee.salary]
);
console.log("Inserted employee with ID: ", rows.insertId);
} catch (error) {
console.error("Error insert employee: ", error);
}
}
insertEmployee({
name: "John Doe",
stand: "Desarrollador",
salary: 50000,
});
En muchos casos, el objeto devuelto contiene propiedades como insertId, que indica el identificador generado para el nuevo registro. Asimismo, se pueden encontrar campos como affectedRows que ayudan a comprender el alcance de la operación y facilitan la integración con el resto de la lógica de la aplicación.
Al estructurar el código, es frecuente encapsular la inserción en una función específica de la capa de datos, separando la lógica de negocio de las consultas y haciendo más sencillo el mantenimiento. Esto posibilita manejar validaciones y respuestas más complejas, respetando los principios de diseño habituales en Node.js.
Consultas UPDATE a MySQL desde nodejs
La instrucción UPDATE resulta esencial cuando se requiere modificar campos existentes en la base de datos sin necesidad de sustituir todo el registro. Con Node.js y su naturaleza asincrónica, las actualizaciones se llevan a cabo sin bloquear otros procesos, lo que favorece la fluidez y capacidad de respuesta de las aplicaciones.
Para manejar la consulta de manera segura, se sugiere recurrir a placeholders que embeben valores al final de la sentencia SQL, evitando concatenaciones manuales que puedan propiciar inyecciones maliciosas. Además, gracias a async/await, se consigue un control más legible de la ejecución y el tratamiento de posibles errores.
A continuación, se ilustra un ejemplo de actualización usando placeholders en el comando UPDATE y un bloque try/catch para gestionar las excepciones:
async function updateEmployee(employee) {
try {
const [_] = await connection.execute(
"UPDATE employees SET name = ?, stand = ?, salary = ? WHERE id = ?",
[employee.name, employee.stand, employee.salary, employee.id]
);
console.log("Updated employee with ID: ", employee.id);
} catch (error) {
console.error("Error update employee: ", error);
}
}
updateEmployee({
id: 4,
name: "John Doe",
stand: "Desarrollador",
salary: 52000,
});
Entre las buenas prácticas para la gestión de estas operaciones destaca la verificación del valor de affectedRows, que indica cuántos registros se han modificado con la instrucción. Este detalle es útil para validar correctamente la respuesta en capas superiores de la aplicación y asegurar que la lógica de negocio prosiga con información precisa. Asimismo, separar la consulta en funciones específicas o módulos facilita el mantenimiento y reduce el acoplamiento con otras partes del código.
Consultas DELETE a MySQL desde nodejs
La eliminación de registros en una tabla se consigue a través de la instrucción DELETE, que resulta útil para depurar datos o retirar información ya procesada. En entornos asincrónicos, la operación se realiza sin bloquear el hilo principal, lo que permite que Node.js continúe gestionando otras tareas mientras se ejecuta la consulta.
Para llevar a cabo la consulta, se recomienda el uso de placeholders en lugar de concatenar manualmente los valores. Esta práctica reduce el riesgo de inyección SQL y aporta un mayor orden en el código. Un ejemplo frecuente incluye la cláusula WHERE para eliminar solo aquellos registros que cumplan con un criterio específico.
A continuación, se muestra un fragmento con async/await y placeholders:
async function deleteEmployee(id) {
try {
const [result] = await connection.execute("DELETE FROM employees WHERE id = ?", [id]);
console.log("Rows deleted: ", result.affectedRows);
} catch (error) {
console.error("Error delete employee: ", error);
}
}
deleteEmployee(4);
En muchas ocasiones, la propiedad affectedRows se convierte en una herramienta valiosa para verificar cuántos registros se eliminaron. Integrar la gestión de estos valores en capas superiores del proyecto ayuda a brindar respuestas adecuadas a la lógica de negocio, manteniendo, al mismo tiempo, un nivel óptimo de coherencia y seguridad en el acceso a la base de datos.
Todas las lecciones de Node
Accede a todas las lecciones de Node y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Node.js
Introducción Y Entorno
Fundamentos Del Entorno Node.js
Introducción Y Entorno
Módulo Http Y Https
Http Y Api Rest
Http Params, Headers Y Body
Http Y Api Rest
Validación De Datos
Http Y Api Rest
Conexión A Bases De Datos Sin Orm
Persistencia
Creación De Consultas Básicas (Crud) Sin Orm
Persistencia
Módulo Fs
Sistema De Archivos
Introducción A La Seguridad
Seguridad
Sesiones Y Cookies
Seguridad
Roles Y Permisos
Seguridad
Testing En Node.js
Testing
Estructura De Carpetas
Arquitectura
Configuración Y Variables De Entorno
Arquitectura
En esta lección
Objetivos de aprendizaje de esta lección
- Realizar consultas SELECT, INSERT, UPDATE y DELETE en MySQL desde Node.js.
- Comprender el uso de async/await para operaciones asincrónicas.
- Utilizar placeholders para proteger frente a inyecciones SQL.
- Implementar una gestión eficiente de resultados usando estructuras de datos en JavaScript.
- Separar la lógica de aplicación y del acceso a datos en funciones o módulos.