Applications Internet 2APP 2020-2021

Javascript, crible d’Eratosthène

const N = 20
const SQRTN = Math.sqrt(N)

let tab = []

for (let i = 2; i < SQRTN; i++) {
   if (tab[i] === undefined) {
      let j = 2*i
      while (j < N) {
         tab[j] = true
         j += i
      }
   }
}

for (let i = 2; i < N; i++) {
   if (tab[i] === undefined) {
      console.log(i, "est premier")
   }
}

Application Express - YesNo

const express = require('express')


const DATA = [
   { answer: "no", image: "https://yesno.wtf/assets/no/19-2062f4c91189b1f88a9e809c10a5b0f0.gif"},
   { answer: "no", image: "https://yesno.wtf/assets/no/16-b66d2db7543f5259c86abc166d6901cf.gif"},

   { answer: "yes", image: "https://yesno.wtf/assets/yes/15-3d723ea13af91839a671d4791fc53dcc.gif"},
   { answer: "yes", image: "https://yesno.wtf/assets/yes/14-b57c6dc03aa15a4b18f53eb50d6197ee.gif"},
]

function getRandomYesNo() {
   let index = Math.floor(Math.random() * DATA.length)
   return DATA[index]
}

const app = express()

app.get('/api', function (request, response) {
   let randomYesNo = getRandomYesNo()
   response.send(randomYesNo)
})

app.get('/', function (request, response) {
   let randomYesNo = getRandomYesNo()
   response.send(`<html><body><img src="${randomYesNo.image}" width="100%"/></body></html>`)
})


app.listen(3000, function () {
  console.log("Server listening on port 3000")
})

Point d’accès REST simplifié

const express = require('express')


const DATA = [
   { answer: "no", image: "https://yesno.wtf/assets/no/19-2062f4c91189b1f88a9e809c10a5b0f0.gif"},
   { answer: "no", image: "https://yesno.wtf/assets/no/16-b66d2db7543f5259c86abc166d6901cf.gif"},

   { answer: "yes", image: "https://yesno.wtf/assets/yes/15-3d723ea13af91839a671d4791fc53dcc.gif"},
   { answer: "yes", image: "https://yesno.wtf/assets/yes/14-b57c6dc03aa15a4b18f53eb50d6197ee.gif"},
]

function getRandomYesNo() {
   let index = Math.floor(Math.random() * DATA.length)
   return DATA[index]
}

let logger = (req, res, next) => {
   console.log('method', req.method, "path", req.url)
   next()
}

let lastUserId = 1
let users = {}


const app = express()

app.use(logger)

app.use(express.json())


app.post('/users', function (request, response) {
   let user = { id: lastUserId++,  ...request.body }
   users[user.id] = user
   response.send(user)
})

app.get('/users/:id', function (request, response) {
   let id = request.params.id
   let user = users[id]
   if (user === undefined) {
      response.status(404).send('Not Found')
   } else {
      response.send(user)
   }
})

app.get('/users', function (request, response) {
   let userList = Object.values(users).sort(function(u1, u2) {
      return u1.id - u2.id
   })
   response.send(userList)
})

app.delete('/users/:id', function (request, response) {
   let id = request.params.id
   let user = users[id]
   if (user === undefined) {
      response.status(404).send('Not Found')
   } else {
      delete users[id]
      response.send(user)
   }
})

app.patch('/users/:id', function (request, response) {
   let id = request.params.id
   console.log('body', request.body)
   let user = users[id]
   if (user === undefined) {
      response.status(404).send('Not Found')
   } else {
      for (let key in request.body) {
         user[key] = request.body[key]
      }
   }
})

app.listen(3000, function () {
  console.log("Server listening on port 3000")
})

Configuration Nginx d’un virtualhost pour l’application YesNo

server {
    listen 80;
    server_name yesno.du-fullstack.fr;

    location /static {
        root /var/www/yesno/;
    }

    location / {
        proxy_pass http://localhost:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}