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.
Avant de commencer, vous devez installer heroku en ligne de commande. Pour cela, suivez les différentes étapes décrites ici.
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.
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.
Dans votre base de données PostgreSQL, exécutez le script du fichier data/pq.sql.
Lancez votre application Express :
npm install
npm start
Testez son fonctionnement avec (par exemple) Postman.
git init
Créez un fichier .gitignore dans lequel vous indiquez au minimum node_modules
.
heroku create
Cette commande crée votre application sur le site heroku et vous donne un nom d’application ainsi qu’une URL.
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.
Envoyez maintenant votre code sur le serveur heroku
git add .
git commit -m"first commit"
git push origin heroku master
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.
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.
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.
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.
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).
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
.
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.
Lancez la commande ci-dessous :
heroku pg:psql
Vous pouvez maintenant saisir des commandes postgreSQL sur votre base de données distante.
select * from persons
)\q
)Testez votre application distante, vous accédez à vos données !!