En aquest tema, aprendrem com connectar un servidor GraphQL a una base de dades. Això és essencial per a qualsevol aplicació que necessiti emmagatzemar i recuperar dades de manera eficient. Explorarem els conceptes bàsics de la connexió a bases de dades, utilitzant exemples pràctics amb Node.js i una base de dades SQL (PostgreSQL) i NoSQL (MongoDB).

Objectius d'aprenentatge

  • Entendre com configurar una connexió a una base de dades des d'un servidor GraphQL.
  • Aprendre a utilitzar llibreries populars per a la connexió a bases de dades SQL i NoSQL.
  • Implementar consultes bàsiques per recuperar i modificar dades.

Requisits previs

  • Coneixements bàsics de Node.js.
  • Familiaritat amb els conceptes de bases de dades SQL i NoSQL.
  • Haver completat els mòduls anteriors del curs.

  1. Configuració del projecte

Instal·lació de dependències

Primer, necessitem instal·lar les dependències necessàries. Utilitzarem pg per a PostgreSQL i mongoose per a MongoDB.

npm install pg mongoose

Configuració de PostgreSQL

  1. Instal·lació de PostgreSQL: Si no tens PostgreSQL instal·lat, pots descarregar-lo des de aquí.
  2. Creació d'una base de dades: Un cop instal·lat, crea una base de dades.
CREATE DATABASE mydatabase;

Configuració de MongoDB

  1. Instal·lació de MongoDB: Si no tens MongoDB instal·lat, pots descarregar-lo des de aquí.
  2. Creació d'una base de dades: MongoDB crea automàticament una base de dades quan s'insereix el primer document.

  1. Connexió a PostgreSQL

Configuració de la connexió

Crea un fitxer db.js per gestionar la connexió a PostgreSQL.

// db.js
const { Pool } = require('pg');

const pool = new Pool({
  user: 'yourusername',
  host: 'localhost',
  database: 'mydatabase',
  password: 'yourpassword',
  port: 5432,
});

module.exports = pool;

Exemple de consulta

Ara, podem utilitzar aquesta connexió en els nostres resolvers de GraphQL.

// resolvers.js
const pool = require('./db');

const resolvers = {
  Query: {
    users: async () => {
      const res = await pool.query('SELECT * FROM users');
      return res.rows;
    },
  },
};

module.exports = resolvers;

  1. Connexió a MongoDB

Configuració de la connexió

Crea un fitxer db.js per gestionar la connexió a MongoDB.

// db.js
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
  console.log('Connected to MongoDB');
});

module.exports = mongoose;

Definició d'un model

Definim un model per a la col·lecció users.

// models/User.js
const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: String,
  email: String,
});

const User = mongoose.model('User', userSchema);

module.exports = User;

Exemple de consulta

Ara, podem utilitzar aquest model en els nostres resolvers de GraphQL.

// resolvers.js
const User = require('./models/User');

const resolvers = {
  Query: {
    users: async () => {
      return await User.find();
    },
  },
};

module.exports = resolvers;

Exercicis pràctics

Exercici 1: Connexió a PostgreSQL

  1. Configura una connexió a PostgreSQL en un nou projecte.
  2. Crea una taula products amb les columnes id, name i price.
  3. Implementa una consulta GraphQL per recuperar tots els productes.

Exercici 2: Connexió a MongoDB

  1. Configura una connexió a MongoDB en un nou projecte.
  2. Crea un model Product amb els camps name i price.
  3. Implementa una consulta GraphQL per recuperar tots els productes.

Solucions

Solució a l'Exercici 1

-- Crea la taula products
CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  price NUMERIC
);
// resolvers.js
const pool = require('./db');

const resolvers = {
  Query: {
    products: async () => {
      const res = await pool.query('SELECT * FROM products');
      return res.rows;
    },
  },
};

module.exports = resolvers;

Solució a l'Exercici 2

// models/Product.js
const mongoose = require('mongoose');

const productSchema = new mongoose.Schema({
  name: String,
  price: Number,
});

const Product = mongoose.model('Product', productSchema);

module.exports = Product;
// resolvers.js
const Product = require('./models/Product');

const resolvers = {
  Query: {
    products: async () => {
      return await Product.find();
    },
  },
};

module.exports = resolvers;

Conclusió

En aquesta secció, hem après com connectar un servidor GraphQL a bases de dades SQL i NoSQL. Hem vist exemples pràctics de com configurar les connexions i implementar consultes bàsiques. Aquest coneixement és fonamental per desenvolupar aplicacions GraphQL que necessiten interactuar amb bases de dades per emmagatzemar i recuperar dades. En el següent tema, explorarem estratègies de recuperació de dades per optimitzar el rendiment de les nostres aplicacions.

© Copyright 2024. Tots els drets reservats