Bienvenue dans le projet Cars API ! Ce projet est une API simple qui gère une base de données de voitures en utilisant sqlite3
.
- Node.js installé sur votre machine
sqlite3
est déjà installé avec ce projet- POSTMAN
-
Forker le projet : Cliquez sur le bouton "Fork" en haut à droite de la page GitHub pour créer une copie de ce dépôt sur votre compte GitHub.
-
Cloner le projet : Sur votre dépôt forké, cliquez sur le bouton "Code" et copiez l'URL du dépôt. Ensuite, sur votre terminal, exécutez la commande suivante pour cloner le projet :
git clone <URL_DU_DEPOT>
Remplacez <URL_DU_DEPOT> par l'URL de votre dépôt GitHub forké.
-
Naviguer dans le dossier :
cd nom-du-dossier-du-projet
Une fois que vous avez cloné le projet, installez les dépendances en exécutant :
npm install
- Lancer le projet en local
Pour démarrer le serveur localement, exécutez :
npm start
Le serveur devrait maintenant être en cours d'exécution à l'adresse http://localhost:3000. Vous devriez voir le message suivant dans votre terminal :
Example app listening at http://localhost:3000
Et vous pouvez tester l'API en accédant à http://localhost:3000/api/cars/test
- Initialiser la base de données Le projet contient un fichier seed.js pour initialiser la base de données avec des données de test. Pour le lancer, exécutez :
node seed.js
Cela va ajouter quelques données de base dans la base de données SQLite.
- Ajouter les opérations CRUD
Le fichier routes/carsRoutes.js
contient des routes pour gérer les voitures. Actuellement, certaines routes de base sont définies. Voici les étapes pour ajouter les opérations CRUD (Create, Read, Update, Delete) :
const { id } = req.params // obtenir l'id à partir des paramètres
obtenir une seule base de voiture sur son identifiant
db.get("SELECT * FROM cars WHERE id = ?", [id], (err, row) => {
if (err) {
res.status(500).json({ error: err.message })
} else {
// if now car found with that id
if (!row) return res.status(404).json({ msg: "car not found" })
// car found ✅
res.json(row)
}
})
❗❗ Attention à ne pas envoyer deux fois la "res" ! Car Node.js n'appréciera pas cela et renverra une erreur disant "you can't send headers twice" (vous ne pouvez pas envoyer les en-têtes deux fois). ❗❗
Nous devons supprimer / remplacer cela.
res.json({
msg: "add a new car ... ",
})
const { carName, carYear, carImage } = req.body
nous pouvons nous assurer que les données sont correctes ici. Nous devrions ajouter une sorte de validation
carName vide? carName string? carName des letre étranges ex: &é"'-è_ç*' ?
si tout est valide alors nous exécutons la requête
db.run(
"INSERT INTO cars (carName, carYear, carImage) VALUES (?, ?, ?)",
[carName, carYear, carImage],
function (err) {
if (err) {
res.status(500).json({ error: err.message })
} else {
res.json({ id: this.lastID })
}
}
)
cette fois nous avons besoin de l'identifiant et des données envoyées dans le corps
const { id } = req.params
const { carName, carYear, carImage } = req.body
on valide ?
la query
db.run(
"UPDATE cars SET carName = ?, carYear = ?, carImage = ? WHERE id = ?",
[carName, carYear, carImage, id],
function (err) {
if (err) {
res.status(500).json({ error: err.message })
} else {
res.json({ changes: this.changes })
}
}
)
const { id } = req.params
si on le trouves pas ... error 404 ✂ 🧨
query:
db.run("DELETE FROM cars WHERE id = ?", [id], function (err) {
if (err) {
res.status(500).json({ error: err.message })
} else {
res.json({ changes: this.changes })
}
})
Vous pouvez tester les routes à l'aide de Postman ou de tout autre outil similaire en envoyant des requêtes HTTP à http://localhost:3000/api/cars.
- GET http://localhost:3000/api/cars : Récupère toutes les voitures.
- GET http://localhost:3000/api/cars/:id : Récupère une voiture spécifique par id.
- POST http://localhost:3000/api/cars : Ajoute une nouvelle voiture en envoyant un JSON avec carName, carYear, et carImage.
- PUT http://localhost:3000/api/cars/:id : Met à jour les informations d'une voiture par id.
- DELETE http://localhost:3000/api/cars/:id : Supprime une voiture par id.