Polymer : âles mains dans le cambouisâ, Ă©pisode 2 : Ajax
Nous parlerons de:
- Comment faire rapidement une petite API REST avec NodeJS et Express
- Comment faire des requĂȘtes
GET
avec le composant<polymer-ajax>
- Comment faire des requĂȘtes
POST
avec le composant<polymer-ajax>
Cet article est beaucoup plus court que le précédent, mais reste incontournable si vous voulez réaliser des SPA ayant des interactions avec un serveur.
Pré-requis
Tout dâabord, il faut avoir lu le tuto prĂ©cĂ©dent : http://k33g.github.io/2013/12/07/POLYMER-1.html.
Ensuite, pour ce 2Ăšme Ă©pisode nous aurons besoin dâun serveur qui puisse nous renvoyer du flux json et auquel nous pourrons envoyer des donnĂ©es (nous allons stocker notre liste cĂŽtĂ© serveur). AprĂšs rĂ©flexion (utiliser Play, utiliser SparkJava, âŠ), jâai donc dĂ©cidĂ© dâaller au plus simple : utiliser NodeJS et Express. Je pars du principe que vous avez installĂ© dĂ©jĂ installĂ© NodeJS (et donc le gestionnaire de package npm).
Création du serveur
- en mode console, installez Express : tapez
sudo npm -g install express
(sous Windows pas besoin desudo
) - puis créez un répertoire pour votre application (dans mon cas :
02-ajax
) -
dans ce répertoire (
cd 02-ajax
), créez un fichierpackage.json
avec le contenu suivant{ "name": "hello-polymer", "description": "hello-polymer app", "version": "0.0.1", "dependencies": { "express": "3.x" } }
- ensuite, tapez
npm install
, les dĂ©pendances nĂ©cessaires pour faire tourner Express vont ĂȘtre installĂ©es - crĂ©er ensuite (toujours dans le rĂ©pertoire de votre application) un rĂ©pertoire
public
dans lequel vous pouvez copier lâensemble des fichiers de lâarticle prĂ©cĂ©dent (index.html
, le répertoirecomponents
et son contenu, et faites de mĂȘme pour le rĂ©pertoirebower_components
)
Vous devriez avoir lâarborescence suivante :
CrĂ©ation de lâapplication Express
Rien de plus simple. Créez dans votre répertoire applicatif un fichier app.js
avec le code suivant:
Pour lancer notre application, il suffira de lancer node app.js
, vous pouvez tester dĂšs maintenant avec lâurl http://localhost:3000
dans votre navigateur, vous arriverez sur le contenu de notre page index.html
. Si vous avez le plugin Postman pour Chrome, vous pouvez tester votre âapiâ dĂšs maintenant (vous pouvez aussi utilisez curl).
# RequĂȘte GET
# RequĂȘte POST
Relancez la requĂȘte GET
:
Nous avons bien un nouvel enregistrement. Notre serveur est opérationnel. Nous pouvons retourner faire du Polymer.
<buddies-list>
appelle le serveur
Alors souvenez-vous, notre âliste de copainsâ <buddies-list>
avait le code suivant :
Nous souhaitons que notre liste soit âremplieâ par les infos du serveur. Pour cela nous allons utiliser le composant <polymer-ajax>
(qui a été installé avec la commande bower install polymer-elements
lors du 1er Ă©pisode)
- Supprimez le code de la méthode
ready
- Dans
<template>
on ajoute le composant<polymer-ajax>
en précisant ses attributs et callbacks - Dans la méthode
onReceive(response)
déclenchée une fois que nous recevons les données du serveur, on affecte les données reçues à la propriétésbuddies
du composant (propriété utilisée dans le template) - Remarque : dans le tag
<polymer-ajax>
vous remarquerez lâattributauto
, qui lance automatiquement la requĂȘte.
Votre code devrez ressembler Ă ceci :
Si vous ouvrez votre navigateur avec lâurl http://localhost:3000/, vous devriez voir sâafficher la nouvelle liste.
Il ne nous reste plus quâĂ gĂ©rer lâajout de nouveaux âbuddiesâ.
<hello-john-doe>
parle aussi au serveur
Nous allons modifier notre composant <hello-john-doe>
pour quâil fasse des requĂȘtes de type POST
vers notre serveur (pour ajouter des âbuddiesâ Ă la liste).
Notre code Ă©tait le suivant :
- LĂ aussi nous allons utiliser le composant
<polymer-ajax>
mais avecmethod="POST"
et sans attributauto
- Nous changeons la méthode
clickMe
: lorsque lâon appuie sur le bouton, on passe les informations{ name : this.name }
au seveur par le biais dâune requĂȘtePOST
. - La commande
this.$.xhr.go();
sert Ă dĂ©clencher lâappel ajax de typePOST
au serveur (oĂčxhr
est lâid du composant<polymer-ajax>
) - Une fois la réponse du serveur obtenue, la méthode
onReceive
est déclenchée (callback), donc nous déclenchons le signal"newbuddy"
avecasyncFire()
(cette fois ci pas besoin de passer les données, il faut juste déclencher le signal).
Voici le code modifié :
Allons juste modifier le code du composant <buddies-list>
pour quâil rafraĂźchisse la liste lors de lâajout dâun Ă©lĂ©ment. Pour cela il suffit de modifier dans buddies-list.html
la méthode onNewBuddySignal()
(dĂ©clenchĂ©e par le signal ânewbuddyâ) de cette façon :
Avec this.$.xhr.go();
, on appelle la requĂȘte de type GET
du composant.
Il ne vous reste maintenant plus quâĂ tester.
Dernier petit rĂ©glage : rendons nos composants âparamĂ©trableâ
Il suffit dâajouter lâattribut url
avec la valeur buddies
dans le tag de déclaration de chacun de nos composants dans notre page index.html
:
Ensuite pour chacun des composants, vous pouvez supprimer lâinitialisation url="buddies"
dans <polymer-ajax>
et ajouter la ligne this.$.xhr.url = this.getAttribute("url");
dans la méthode ready()
.
Vous pouvez tester Ă nouveau. Thatâs all :)
Vous trouverez le code de lâexemple ici : https://github.com/k33g/polymer-les-mains-dans-le-cambouis/tree/master/02-ajax.
Piste de rĂ©flexion : jâai embarquĂ© le composant
<polymer-ajax>
au sein de mes composants. Il pourrait ĂȘtre intĂ©ressant de les âextraireâ et les rendre indĂ©pendants, et les faire communiquer avec les autres composants par lâĂ©mission et la rĂ©ception de signaux.
Bonne lecture.
Tweet