En réalisant les opérations décrites ci-dessous, vous allez déployer votre API sur un serveur heroku. Vous avez la possibilité de déployer votre application gratuitement, les services proposés sont alors assez basiques.

Ce qui est décrit ci-dessous s’inspire très largement de l’excellent tutoriel proposé sur le site d’heroku. A la différence du tutoriel proposé, les étapes sont ici simplifiées, et appliquées à votre application Express.js.

Attention, la partie gestion des données ne fonctionne qu’avec postgreSQL.

Cadre général

  1. Avant de commencer, vous devez installer heroku en ligne de commande. Pour cela, suivez les différentes étapes décrites ici.

  2. Créez un répertoire dans lequel placer le code de votre application. Recopiez dans ce répertoire les fichiers dont vous avez besoin. Ici, nous allons repartir de l’application persons, notre répertoire racine s’appèlera donc persons.

  3. L’architecture de votre application doit donc être la suivante :

    persons
      |-- data
      |    |-- pg.js
      |    |-- pg.sql
      |-- package.json
      |-- server.js
      |-- router.js   
    • Le fichier data/pg.sql contient le script de création de la base de données. Il vous permet de régénérer votre base de données à tout moment.

    • Le fichier data/pg.js contient le script de connexion à votre base postgreSQL. La constante pool est telle que votre application peut fonctionner en mode local.

    • Le fichier package.json permet de générer l’application. Remarquez la ligne

      "engines": {
          "node": "12.15.0"
        },

      Elle est ajoutée afin de permettre à heroku de déterminer quelle version de Node.js il faut utiliser pour votre application.

    • Le fichier server.js contient la base de votre serveurn sans la gestion des routes.

    • Le fichier router.js contient l’ensemble des routes.

Test en mode local

  1. Dans votre base de données PostgreSQL, exécutez le script du fichier data/pq.sql.

  2. Lancez votre application Express :

    npm install
    npm start
  3. Testez son fonctionnement avec (par exemple) Postman.

Déploiement

  1. git init
  2. Créez un fichier .gitignore dans lequel vous indiquez au minimum node_modules.

  3. heroku create

    Cette commande crée votre application sur le site heroku et vous donne un nom d’application ainsi qu’une URL.

  4. A la racine de votre application, créez le fichier Procfile (attention de bien respecter l’orthographe), contenant la ligne suivante :

    web: node server.js

    Cette ligne permet au serveur heroku de déterminer la commande de lancement de votre application.

  5. Envoyez maintenant votre code sur le serveur heroku

    git add .
    git commit -m"first commit"
    git push origin heroku master
  6. Pour vous assurer du fonctionnement de votre application, entrez la commande suivante :

    heroku ps:scale web=1

    Cela vous assure que votre application sera active. Si vous indiquez web=0, votre application deviendra inactive.

  7. Vous pouvez lancer votre application avec une commande :

    heroku open

    Pour le moment, l’accès à la base de données ne fonctionne pas. Ceci est logique puisque vous n’avez pas encore créé votre base de données distante.

  8. Testez la route /persons. Vous observez qu’elle ne fonctionne pas. Consultez alors le fichier de log à l’aide de la commande heroku logs. Vous voyez un message du type :

    at=error code=H12 desc="Request timeout" method=GET path="/persons" 

    Vous pouvez retrouver une description des codes d’erreur sur la page dédiée sur heroku.

  9. Vous pouvez également exécuter votre application en local

    heroku local web

    Remarquez que le port utilisé est 5000 et que la commande exécutée pour lancer l’application est celle du fichier Procfile.

Ajout de la base de données

Nous allons ici ajouter une base de d"onnées PostreSQL même s’il existe beaucoup d’autres possibilités (voir la ici la liste des possibilités).

  1. La commande ci-dessous crée votre base de données et positionne la variable d’environnement DATABASE_URL.

    heroku addons:create heroku-postgresql:hobby-dev

    Vous pouvez vérifier l’existence de la variable d’environnement par la commande heroku config.

  2. Modifiez la définition de la variable pool dans votre fichier data/pg.js :

    const pool = new Pool({
        connectionString: process.env.DATABASE_URL,
        ssl: true
    });

    et validez votre code sur git.

    Vous pouvez remarquer que votre application ne fonctionne plus en mode local.

  3. Lancez la commande ci-dessous :

    heroku pg:psql

    Vous pouvez maintenant saisir des commandes postgreSQL sur votre base de données distante.

    • Copiez/collez le code SQL de votre fichier pg.sql.
    • Vérifiez que votre table a bien été créée (select * from persons)
    • Refermez la connexion (\q)
  4. Testez votre application distante, vous accédez à vos données !!