Node.js y PostgreSQL – Ejemplo de conexión

Publicado por parzibyte en

Node JS puede ser conectado a PostgreSQL fácilmente a través del paquete pg.

En este tutorial vamos a ver cómo conectar Node.JS con PostgreSQL y hacer las cuatro operaciones básicas de la base de datos: Create, read, update y delete (CRUD); todo esto evitando inyecciones SQL y usando un poco el model MVC.

Para la interfaz vamos a usar Bootstrap (ya que será responsivo), y para que el usuario use nuestra app web vamos a usar Express.

Archivos que conforman el CRUD de PostgreSQL con Express

Aunque estos ejemplos son con la web, los mismos pueden ser ejecutados en la terminal sin ningún problema.

Requisitos y recomendaciones

Recuerda instalar Node.JS y también PostgreSQL.

Si no sabes mucho sobre Express, te recomiendo leer primero este post o este otro que usa express-generator.

¿Te gusta más MySQL? mira este CRUD con MySQL y Node.js

Instalar librería de pg

En el código que dejaré al final estará el package,json en donde están todas las dependencias de la app, sin embargo nunca sobra dejar el comando de instalación:

npm install --save pg

Conexión y base de datos

Vamos a conectarnos a una tabla de productos que tienen id autoincrementable, nombre y precio.

La estructura de la tabla es la siguiente:

Nos vamos a conectar a través de ella creando una conexión a través de un pool. No olvides cambiar tus credenciales de acuerdo a tu configuración.

Si necesitas crear una base de datos con usuarios mira este post.

 Las consultas

Cuando establecemos una conexión con la base de datos podemos llamar al método query con la consulta como cadena y opcionalmente un arreglo de valores que van a remplazar a los placeholders.

El placeholder es aquel indicado con $1, $2, etcétera y evita las inyecciones SQL. En los ejemplos veremos su uso.

Por cierto, vamos a usar async y await, una manera sencilla de abstraer las promesas.

El modelo

Basta de charlas, es hora de ver el modelo de productos que se encargará de interactuar con la base de datos:

Cuando hacemos una consulta que devuelve datos, los mismos vienen en la propiedad rows.

Si solo vamos a obtener un dato, accedemos a rows[0].

El controlador

Voy a usar el enrutador como controlador, pues se encargará de renderizar las vistas y pasarle datos a través de los modelos.

Si no sabes mucho sobre las rutas mira este post.

Como ves, algunas rutas se encargan de renderizar vistas y otras de recuperar datos del formulario. Para pasar datos a las vistas se pasa un objeto como segundo argumento a res.render.

Las vistas

Las vistas son creadas con EJS, aunque pueden ser creadas con cualquier otro motor de plantillas. Comencemos viendo el encabezado y el pie, pues serán unas cosas que siempre vamos a incluir en todas las demás plantillas.

Recuerda que está basado en una plantilla de Bootstrap 4.

Formulario para insertar datos

Insertar producto en base de datos de PostgreSQL

El formulario para insertar datos es el siguiente, fíjate en el atributo name que tiene cada input, pues a él accedemos desde el router de express.

Editar producto

Para editar, debemos obtener el id producto de la URL, obtenerlo desde nuestro modelo y después rellenar el formulario.

Formulario de edición de producto para ser enviado a Express

Mostrar productos

Para mostrarlos dibujamos una tabla con los detalles del producto y además dos enlaces.

Un enlace es para eliminar y otro para editar.

Los enlaces parecen botones gracias a la clase btn, y a sus variantes.

Poniendo todo junto

CRUD PostgreSQL y Node

Si quieres descarga el código de GitHub, asegúrate de haber instalado Node y PGSQL.

Dirígete a la carpeta del proyecto e instala las dependencias con:

npm install

Cuando se acaben de instalar ejecuta el proyecto con:

set debug=crud-postgresql-node:* & npm start

Finalmente visita localhost:3000

Conclusión

Node.JS y sus paquetes ayudan a que el desarrollador se centre en la lógica de la aplicación, pues solo tiene que conectar los paquetes entre sí y programar la lógica de negocio.

Dejo un enlace a la documentación oficial del paquete.

Te invito a leer más sobre Node y PostgreSQL.


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: