ejs like html

✳️ Comment à la place de l'extention .ejs mettre .html des fichiers de vues.

 const ejs = require('ejs')

app.set('views', path.join(__dirname, './views'));

app.set('view engine', 'html');
app.engine('.html', ejs.__express);

Fetch

 L'API fetch fournit une interface Javascript pour accéder et manipuler les demandes et les réponses sur un réseau. Elle est fournie par la méthode globale window.fetch() du navigateur.

 

Dans un fichier index.html

  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4.     <meta charset="UTF-8">

  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">

  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">

  7.     <title>Document</title>

  8. </head>

  9. <body>

  10.     <h1>REpos contenant db</h1>

  11.     <ol id="repos"></ol>

  12.     <script src="./index.js"></script>

  13. </body>

  14. </html>

 

index.js

  1. async function getFromGitHub() {

  2.     try {

  3.         const userName = 'dupontdenis';

  4.         const url = 'https://api.github.com/users';

  5.      

  6.         const reposResponse = await fetch(`${url}/${userName}/repos`);

  7.  

  8.         const userRepos = await reposResponse.json();

  9.  

  10.         userRepos

  11.             .slice(0, 100)

  12.             .filter(({ name }) => /db/ig.test(name))

  13.             .sort((r1, r2) => {

  14.                 if (r1.name > r2.name) { return -1 } else return 1;

  15.             })

  16.             .forEach(({ name }) =>

  17.                 document

  18.                     .querySelector("#repos")

  19.                     .insertAdjacentHTML('afterbegin', `<li> ${name} </li>`))

  20.  

  21.     } catch (error) {

  22.         console.log(error);

  23.     }

  24. }

  25. getFromGitHub();

 

Connaissance des API

Github me permet de faire des recherches par page en triant les données.
Pour tester, ajoutons à l'adresse : ?per_page=100&sort=name&direction=desc

  1. async function getFromGitHub() {

  2.     try {

  3.         const userName = 'dupontdenis';

  4.         const url = 'https://api.github.com/users';

  5.         const reposResponse = await fetch(`${url}/${userName}/repos?per_page=100&sort=name&direction=desc`);

  6.  

  7.         const userRepos = await reposResponse.json();

  8.  

  9.         userRepos

  10.             .filter(({ name }) => /db/ig.test(name))

  11.             .forEach(({ name }) =>

  12.                 document

  13.                     .querySelector("#repos")

  14.                     .insertAdjacentHTML('afterbegin', `<li> ${name} </li>`))

  15.  

  16.     } catch (error) {

  17.         console.log(error);

  18.     }

  19. }

  20. getFromGitHub();

 

Passons du navigateur à une application en NodeJS

  1. const express = require('express');

  2. const { Octokit } = require("@octokit/core");

  3. const path = require('path');

  4. const debug = require('debug')('git');

  5. const app = express();

  6.  

  7. app.use(express.static(path.join(__dirname, 'public')));

  8. app.set('view engine', 'pug');

  9.  

  10. const octokit = new Octokit({});

  11.  

  12. app.get('/users/:id', async (req, res) => {

  13.  

  14.     try {

  15.         debug(`id = ${req.params.id}`);

  16.         const { data: user } = await octokit.request(`GET /users/{username}`, {

  17.             username: req.params.id,

  18.         });

  19.         debug(`data  = ${user.login}, ${user.avatar_url}`);

  20.  

  21.         res.render('index', { user });

  22.     } catch (error) {

  23.         console.log(error)

  24.     }

  25.  

  26. });

  27.  

  28. app.get('/users/:id/repos', async (req, res) => {

  29.  

  30.     try {

  31.         debug(`id = ${req.params.id}`);

  32.         debug(`sort = ${req.url}`);

  33.         const { data: repos } = await octokit.request(`GET ${req.url}`);

  34.         res.render('repos', { repos });

  35.     } catch (error) {

  36.         console.log(error)

  37.     }

  38.  

  39. });

  40. const port = process.env.PORT || 3000;

  41. app.listen(port, () => console.log(`Listening on port ${port}...`));

 

Lig: 33 ${req.url} contient l'ensemble de l'adresse par exemple :

/users/dupontdenis/repos?page2=&sort=name&direction=asc

La vue avec pug

  1. extends layout

  2.  

  3. mixin list-ord

  4.     ul 

  5.     each repo in repos

  6.         li= repo.name

  7.  

  8. block content

  9.     h1 repositories 

  10.     +list-ord

 

Testez les adresses : 

http://localhost:3000/users/dupontdenis/repos

http://localhost:3000/users/dupontdenis/repos?page2=&sort=name&direction=asc

 

git

Voir dans la branche amélioration

https://github.com/dupontdenis/useAPIgit.git

AXIOS

  
        

AXIOS  

Axios est un client HTTP simple basé sur les promesses pour le navigateur et node.js. Axios fournit une bibliothèque simple à utiliser dans un petit paquet avec une interface très extensible.

Il permet d'écrire simplement dans une application

  1.  const {data:films} = await axios.get('https://ghibliapi.herokuapp.com/films');

En lieu et place de notre bon vieux http.request et ses vingt lignes de code.
  1. const http = require('http')
  2. const options = {
  3.   hostname: 'localhost',
  4.   port: 8000,
  5.   path: '/cool/peutimporte',
  6.   method: 'GET'
  7. }

  8. const req = http.request(options, res => {
  9.   console.log(`statusCode: ${res.statusCode}`)

  10.   res.on('data', d => {
  11.     process.stdout.write(`GET: ${d}`)
  12.   })
  13. })

  14. req.on('error', error => {
  15.   console.error(error)
  16. })

  17. req.end()

  18. // Create a local server to receive data from
  19. const server = http.createServer((req, res) => {
  20.   res.writeHead(200, { 'Content-Type': 'application/json' });
  21.   res.end(JSON.stringify({
  22.     data: 'Je suis envoyé par le serveur! '
  23.   }));
  24. });

  25. server.listen(8000);

                                                            API

                                                             Voici deux exemples d'application utilisant une API.

                                                            Les films du studio Ghibli

                                                            https://github.com/dupontdenis/filmsGhibli.git

                                                            $ node index

                                                            http://localhost:3000/films/



                                                            Votre avatar GitHub



                                                            https://github.com/dupontdenis/useAPIgit.git

                                                            $ node index

                                                            Pour voir votre avatar, il vous suffit de mettre le nom de votre pseudo à la place de VOTREPSEUDO dans l'adresse, http://localhost:3000/users/VOTREPSEUDO

                                                            http://localhost:3000/users/octocat

                                                            http://localhost:3000/users/dupontdenis