Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🟢
Intermediaire 30 min Express

Express avec PostgreSQL : guide pratique

Pourquoi Express avec PostgreSQL : guide pratique ?

Dans un monde où les applications web évoluent constamment, il est crucial de choisir des outils et des technologies qui offrent une grande flexibilité et des performances optimales. L'usage de Express.js pour la création d'applications web modernes en JavaScript, combiné à PostgreSQL comme système de gestion de base de données (SGBD), offre une combinaison unique de puissance et de simplicité.

Contexte réel : pourquoi un dev a besoin de ca au quotidien

En tant que développeur backend, vous travaillez souvent sur des projets qui nécessitent une communication efficace avec la base de données. PostgreSQL est connu pour son robustesse, sa performance et ses fonctionnalités avancées. L'utilisation de Express.js permet d'abstraire cette communication en offrant une interface simple et intuitive pour gérer les requêtes HTTP.

Un cas d'usage concret en 2-3 phrases

Imaginez un blog en ligne où les utilisateurs peuvent créer, lire, mettre à jour et supprimer des articles. Une telle application nécessiterait une interface web (Express.js) pour la gestion des routes et des formulaires, ainsi qu'une base de données robuste (PostgreSQL) pour stocker les articles.

Prerequis

  • Connaissances Nécessaires :

    • JavaScript et Node.js
    • Concepts de bases d'expressions régulières
    • notions de base de SQL
    • Connexion à une base de données depuis une application back-end
  • Outils à Installer :

    • Node.js (v14.x ou plus)
    • PostgreSQL (v12.x ou plus)
    • Un éditeur de code (VSCode, WebStorm, etc.)

Concepts fondamentaux

Installation et Configuration

Avant de commencer, assurez-vous d'avoir les outils nécessaires installés.

## Installer Node.js et PostgreSQL
npm install -g express-generator
sudo apt-get install postgresql postgresql-contrib

Créez un nouveau projet Express en utilisant express-generator :

## Créer un nouveau projet Express
express my-postgres-app

## Entrer dans le dossier du projet
cd my-postgres-app

Connexion à PostgreSQL

Installez les dépendances nécessaires pour travailler avec PostgreSQL :

npm install pg

Créez un fichier db.js pour gérer la connexion à votre base de données :

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

const pool = new Pool({
  user: 'your_db_user',
  host: 'localhost',
  database: 'my_database',
  password: 'your_db_password',
  port: 5432,
});

module.exports = pool;

Modèles et Contrôleurs

Créez un modèle pour votre table articles :

// models/article.js
const db = require('../db');

async function createArticle(article) {
  const { title, content } = article;
  const result = await db.query(
    'INSERT INTO articles (title, content) VALUES ($1, $2) RETURNING *',
    [title, content]
  );
  return result.rows[0];
}

async function getArticles() {
  const result = await db.query('SELECT * FROM articles');
  return result.rows;
}

module.exports = { createArticle, getArticles };

Créez un contrôleur pour gérer les routes :

// controllers/articleController.js
const articleModel = require('../models/article');

exports.createArticle = async (req, res) => {
  try {
    const newArticle = await articleModel.createArticle(req.body);
    res.status(201).json(newArticle);
  } catch (error) {
    res.status(500).json({ error: 'Internal Server Error' });
  }
};

exports.getArticles = async (req, res) => {
  try {
    const articles = await articleModel.getArticles();
    res.status(200).json(articles);
  } catch (error) {
    res.status(500).json({ error: 'Internal Server Error' });
  }
};

Routes

Créez des routes pour gérer les requêtes HTTP :

// routes/articles.js
const express = require('express');
const router = express.Router();
const articleController = require('../controllers/articleController');

router.post('/', articleController.createArticle);
router.get('/', articleController.getArticles);

module.exports = router;

Mise en Place des Routes

Importez les routes dans votre application principale :

// app.js
const express = require('express');
const bodyParser = require('body-parser');
const articlesRouter = require('./routes/articles');

const app = express();

app.use(bodyParser.json());
app.use('/api/articles', articlesRouter);

module.exports = app;

Mise en pratique : projet fil rouge

Création du Projet

Créez un nouveau dossier pour votre projet et initialisez un nouveau projet Node.js :

mkdir my-blog-app
cd my-blog-app
npm init -y
npm install express pg body-parser

Structure du Projet

Organisez votre projet en utilisant les mêmes fichiers que précédemment (app.js, db.js, models/article.js, controllers/articleController.js, routes/articles.js).

Création des Tables PostgreSQL

Connectez-vous à votre base de données et créez une table articles :

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Mise en Route

Lancez votre application Express :

node app.js

Accédez à http://localhost:3000/api/articles pour voir les routes disponibles.

Erreurs fréquentes et debugging

Erreur 1 : Connexion refusée

Code incorrect :

const pool = new Pool({
  user: 'your_db_user',
  host: 'localhost',
  database: 'my_database',
  password: 'wrong_password',
  port: 5432,
});

Code correct :

const pool = new Pool({
  user: 'your_db_user',
  host: 'localhost',
  database: 'my_database',
  password: 'correct_password',
  port: 5432,
});

Erreur 2 : Syntaxe SQL incorrecte

Code incorrect :

const result = await db.query(
  "INSERT INTO articles (title, content) VALUES ('$1', '$2') RETURNING *",
  [title, content]
);

Code correct :

const result = await db.query(
  'INSERT INTO articles (title, content) VALUES ($1, $2) RETURNING *',
  [title, content]
);

Erreur 3 : Mauvaise gestion des erreurs

Code incorrect :

router.post('/', async (req, res) => {
  const newArticle = await articleModel.createArticle(req.body);
  res.status(201).json(newArticle);
});

Code correct :

router.post('/', async (req, res) => {
  try {
    const newArticle = await articleModel.createArticle(req.body);
    res.status(201).json(newArticle);
  } catch (error) {
    res.status(500).json({ error: 'Internal Server Error' });
  }
});

Pour aller plus loin

Pistes de Connaissance Avancée

  1. Transactions SQL : Apprenez à gérer les transactions pour assurer l'intégrité des données.
  2. Indexes et Optimisation : Améliorez la performance de vos requêtes en utilisant des index.
  3. ORMs : Explorez les Object-Relational Mapping (ORM) pour une meilleure abstraction entre votre application et la base de données.

Défi Pratique

Créez un CLI tool simple qui permet d'ajouter, lire, mettre à jour et supprimer des articles en utilisant PostgreSQL et Express.js.

Besoin d'aide sur Express ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.