Java Script
Java Script
<!doctype html>
<html lang="fr">
<head>
<title>Example</title>
<script>
var msg = "hello";
alert(msg);
</script>
</head>
<body>
</body>
</html>
Best practice
<!doctype html>
<html lang="fr">
<head>
<title>Example</title>
<script src="script.js"></script>
</head>
<body>
</body>
</html>
Messages de log
script.js
console.log('Hello, world!');
Exécution de JavaScript
for-loops:
for (let i = 0; i < 5; i++) { … }
while-loops:
while (notFinished) { … }
comments:
// comment or /* comment */
conditionals (if statements):
if (...) {
...
} else {
...
}
Fonctions
function name() {
statement;
statement;
...
}
Exemple
hello();
hello();
function hello() {
console.log('Hello!');
console.log('Welcome to JavaScript');
}
printMessage('hello', 3);
printMessage('hello', 3);
const y = 10;
y = 0; // error!
y++; // error!
const list = [1, 2, 3];
list.push(4); // OK
Les variables déclarées avec const ne peuvent
pas être réaffectées
Cependant il reste possible de modifier l’objet
sous jacent
● Ressemble au final de Java
Bonnes pratiques
if (username) {
// username is defined
}
Egalité
Quelle différence?
● null est la valeur représentant l’absence de valeur
(comme null en Java)
● undefined est la valeur d’une variable n’ayant pas reçu
de valeur
Tableaux
const scores = {
peach: 100,
mario: 88,
luigi: 91
};
add(2, 2); // 4
Ajout d’une fonction sur un objet
// Callback style
groceries.forEach(function(item) {
console.log(item);
});
class Array {
forEach(callback) {
for (let i = 0; i < this.length; i++) {
callback(this[i], i, this);
}
}
}
JavaScript peut :
document.querySelector('css selector');
● Retourne le premier noeud qui matche la règle CSS
document.querySelectorAll('css selector');
● Retourne tous les éléments qui matchent la règle CSS
Quelques propriétés des noeuds du DOM
Property Description
document.createElement(tag string)
element.appendChild(element);
element.remove();
Évènements
Click Me!
{...}
fetch('images.txt');
fetch('images.txt').then(response =>
console.log(response.status));
REST
Restful API
- http://example.com/products
- http://example.com/products/1
- http://example.com/products/1/description
Action sur les ressources
API de Twitter
https://developer.twitter.com/en/docs/tweets/post-and-engage/overview
API Endpoints
POST statuses/update
Paramètres des Endpoints
If-None-Match: c0947-b1-4d0258df1f625
API Restful et cache (E-tags)
OpenAPI
Console.log(document.getElementById(‘information’));
NodeJS
NodeJS
Console.log(document.getElementById(‘information’));
document WHAT ?!
NodeJS
Console.log(“Hello”);
“Hello”
NodeJS en ligne de commande
$ node
> let i = 0
undefined
> i++
0
> i
1
NodeJS avec des scripts
function hello() {
console.log(“Hello World!”);
}
hello();
monscript.js
NPM: Node Package Manager
package.json
NPM: Pour les nuls...
$ npm start
$ npm test
NPM: Pour les nuls...
$ npm installDb
ExpressJS
ExpressJS
app.listen(3000, () => {
console.log("Serveur démarré");
});
app est une instance d’ExpressJS.
Routes
res.send('hello world');
res.status(404).end();
res.status(404).send('product not found.');
res.json(json_object);
res.redirect(301, 'http://example.com');
Paramètres d’une requête HTTP
// http://localhost:3000/?prenom=john&nom=doe
app.get('/', (req, res) => {
res.send(req.query.prenom);
});
Paramètres d’une requête HTTP
// http://localhost:3000/john/doe
app.get('/:prenom/:nom', (req, res) => {
var prenom = req.params.prenom
res.send('Salut ' + prenom + ’ !’);
});
Headers d’une requête HTTP
app.use(express.static("public"));
Différents outils :
● Forever
● nodemon
● pm2
● supervisor
Outils: cURL
getpostman.com
insomnia.rest
Outils: Insomnia
Outils: Ngrok
https://ngrok.com
Outils: Ngrok
ExpressJS (suite)
Rappel
app.listen(3000, () => {
console.log("Serveur démarré");
});
Rappel
app.listen(3000, () => {
console.log("Serveur démarré");
});
Modules
function printHello() {
console.log("Hello")
}
function printWorld() {
console.log("World!")
}
module.exports.printHello = printHello
module.exports.printWorld = printWorld
Modules
require(“./module1/fichier”)
Ceci peut être utile pour par exemple définir des variables dans les objets
req et res qui pourront être accessibles à tout le reste de l’application.
app.use(checkAuth)
app.use(“/user/:id”, checkAuth)
Requêtes avec données dans le corps
Requêtes avec données dans le corps
BodyParser
// Content-type: application/json
app.use(bodyParser.json())
// Content-type: application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
BodyParser
// Avec callback
MongoClient.connect(MONGO_URL, (err, database) => {
db = database;
})
MongoDB: récupérer l’objet Db
let db = null;
function onConnected(err, database) {
db = database;
}
// Avec promesse
MongoClient.connect(MONGO_URL)
.then(onConnected)
MongoDB: récupérer l’objet Collection
collection.insertOne(doc, callback);
function findProduct(name) {
collection.findOne(
{"name": name},
(err, product) => {
return product;
}
)
}
collection.findOne() avec ObjectID
function findProduct(id) {
collection.findOne( {"_id": ObjectID(id)},
(err, product) => {
return product;
})
}
collection.find()
collection.update(query, newDocument);
collection.update(old_product, new_product)
}
collection.update() et upsert
collection.deleteOne(query, callback);
collection.deleteMany(query, callback);
Permet de supprimer tous les document qui correspondent à
la query.
collection.deleteMany()
Permet de vider toute la collection en une fois.
Opérateurs de Requêtes sur les documents
db.records.createIndex( { userid: 1 } )
price: 1 } )
let db = null;
function onConnected(err, database) {
db = database;
}
// Avec promesse
MongoClient.connect(MONGO_URL, {poolSize: 10})
.then(onConnected)
MongoDB: réplication
Utiliser MongoDB avec ExpressJS
let db = null;
function onConnected(err, database) {
db = database;
app.get(“/”, (req, res) => {
db.collection(“products”).find({}, (err, items)
=> { res.json(items) })
})
}
MongoClient.connect(MONGO_URL)
.then(onConnected)
MongoDB: Studio 3T
Authentification
Types d’authentification: Basic Auth
Types d’authentification: Basic Auth
http://toto:[email protected]
header.payload.signature
JWT: Header
{
"alg": "HS256",
"typ": "JWT"
}
Voici un exemple:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
HMACSHA256(base64UrlEncode(header) + "." +
base64UrlEncode(payload), secret)
OAuth1a, OAuth2