Pages

Projet final

 

express-locallibrary-tutorial

Tutorial "Local Library" website written in Node/Express.

 

🎉code → https://github.com/dupontdenis/library.git


http://localhost:3000/catalog

http://localhost:3000/catalog/books


http://localhost:3000/catalog/author/create


API examples


🍕Projet API pizza

📚Projet API Books

🧑🏽‍🏫Projet API Teacher

Virtual en action !


 

How to : virtual

Mongoose tout en un !

 


→ mongoose how to !

Mongoose !


📕Cours 

→ https://dupontmongodb.blogspot.com/


🛟Tout en 1 

→ Mongoose par l'exemple !


Installation Mongodb ⚒️

 mongodb →

installation mongodb

🥷Code

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


💸Code avec mongoose

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


Test

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



Let's start 

Mongoose !

Let's start with mongoose !

Example : 

  1. // Include virtuals when converting documents to objects/JSON
  2. pizzaSchema.set("toObject", { virtuals: true });
  3. pizzaSchema.set("toJSON", { virtuals: true });

  4. // Virtual populate: connect Pizza -> Topping via Topping.pizzas (inverse relation)
  5. pizzaSchema.virtual("toppings", {
  6.   ref: "Topping",
  7.   localField: "_id",
  8.   foreignField: "pizzas",
  9.   justOne: false,
  10. });

  11. // Virtual total price (cents) includes toppings when `toppings` is populated
  12. pizzaSchema.virtual("totalPriceCents").get(function () {
  13.   // Compute total price from populated `toppings` only (no base pizza price)
  14.   if (
  15.     !this.toppings ||
  16.     !Array.isArray(this.toppings) ||
  17.     this.toppings.length === 0
  18.   )
  19.     return 0;
  20.   return this.toppings.reduce((acc, t) => acc + (t.priceCents || 0), 0);
  21. });

  22. pizzaSchema.virtual("totalPriceEur").get(function () {
  23.   return (this.totalPriceCents || 0) / 100;
  24. });

  25. export const Pizza = mongoose.model("Pizza", pizzaSchema);

Relation : many to one



Model : Simulate a DB

 Learn how to simulate a model

https://github.com/dupontdenis/simu-db-fake-books.git


📌En action : 

🚩 PUT/DELETE how-to

 💡 Les navigateurs ne supportent que GET et POST en natif dans les formulaires. Découvrez comment gérer DELETE et PUT. 

Méthode CRUD

Support natif HTML

Solution avec Express

Create (POST)

✅ Oui

<form method="POST">

Read (GET)

✅ Oui

<form method="GET">

Update (PUT)

❌ Non

method-override + POST

Delete (DELETE)

❌ Non

method-override + POST




Delete/update

  • In this repository we keep things explicit and simple by using POST endpoints for update and delete actions (for example /posts/:id/update and /posts/:id/delete). Those endpoints accept normal POST form submissions and return normal redirects or rendered pages.

  • HTML forms only submit GET or POST. method-override is a middleware used to turn a POST into a PUT/DELETE on the server (usually by reading a hidden _method field or a query parameter).

  • This project was converted to an API-first, client-rendered demo where the server returns JSON and the frontend (in public/index.html and public/js/app.js) uses fetch() to perform CRUD operations.




Avancé : une seule vue pour edit/create https://github.com/dupontdenis/CRUD.git

API : how to

  

🛟→lien


🛩️→ lien


📅 Date DS

 


 Le premier DS aura lieu le 01 décembre.

🍕PizzasAPI

 






🚀 https://mypizzasapi.onrender.com/

{
  "message": "Welcome to Pizza API! 🍕",
  "description": "A simple REST API for pizzas - inspired by ghibliapi.dev",
  "endpoints": {
    "pizzas": "/API/pizzas",
    "pizzaById": "/API/pizzas/:id",
    "pizzasWithPrices": "/API/pizzasWithPrices",
    "ingredientPrices": "/API/ingredientPrices",
    🪛"pizzaSearchByIngredient": "/API/pizzas/search?ingredient=🧀",
"pizzaSinglePrice": "/API/pizzasWithPrices/:id/price", "customPrice": { "method": "POST", "path": "/API/pizzasWithPrices/compute", "body": { "ingredients": [ "🍅", "🧀" ] } } } }

Exemples : 
🪛Ainsi pour tester l'API avec ingredient=🧀
https://mypizzasapi.onrender.com/API/pizzas/search?ingredient=🧀
🪛Ainsi pour tester l'API avec ingredient=🍅 et ingredient=🍄
https://mypizzasapi.onrender.com/API/pizzas/search?ingredient=🍄&ingredient=🍅

🥷Pour tester : https://dupontdenis.github.io/testMyPizzasAPI/

projet

 

Souriez : projet

Clonez  https://github.com/dupontdenis/takepicture.git

Lancez dans un terminal le serveur avec la commande : 

node app



Dans votre navigateur allez http://localhost:3000/



see also   https://github.com/dupontdenis/Smill.git

Projet

 


Travail perso

 

DS

  


Mon tirage

Résultats du Loto



🪛 Comment afficher mon gain ?

NPM :


💥 Cours

🪛 Mon premier projet nodejs : TD 1

TD 2

💥Les modules

 Les modules se répartissent en trois catégories :

1️⃣les modules de fichiers,

2️⃣les modules Node

3️⃣les modules

1️⃣ Modules fichiers

2️⃣Modules Node

2.1 Process

2.2 Event

2.3 fs

2.4 Path

2.5 HTTP

Cours

TD

👹TD 'express)

Have fun !

  Analysez ce code ! 


const arr2 = [1, 2, 3];
const arr1 = [4, 5, 6, 7, 8];

const [small, large] = arr1.length < arr2.length
    ? [arr1, arr2]
    : [arr2, arr1];
console.log(small == arr2); // [1, 2, 3] [4, 5, 6, 7, 8]

const mapToppings = new Map([
  ["queen", ["🐷", "🍄", "🍅", "🧀"]],
  ["cheese", ["🧀", "🍅"]],
  ["oriental", ["🍅", "🐑", "🍄", "🌶"]],
  ["royal", ["🍅", "🌵"]],
]);

const order1 = [
  { name: "queen", ingredients: mapToppings.get("queen") },
  { name: "cheese", ingredients: mapToppings.get("cheese") },
  { name: "oriental", ingredients: mapToppings.get("oriental") },
  { name: "royal", ingredients: mapToppings.get("royal") },
];

const order2 = [
  { name: "queen-promo", ingredients: mapToppings.get("queen") },
  { name: "royal-promo", ingredients: mapToppings.get("royal") },
];

function intersectionBy(a, b, keyFn) {
  const setB = new Set(b.map(keyFn));
  return a.filter((item) => setB.has(keyFn(item)));
}

const common = intersectionBy(order1,
                              order2,
                              (pizza) => pizza.ingredients);
console.log(common);
// [{ name: "queen", ingredients: [...] }, { name: "royal", ingredients: [...] }]

Exemple de code bloquant



🚀 https://github.com/dupontdenis/fakeWait.git


Asynchronisme !

Introduction


Cours

Callback, promesses et Async/Await

Slides


BD (callback)

asynchrone exemple

🆘(sqlite node)


TD



🚀Asynchrone dans votre navigateur (es6)