NodeJS + Express partie 4 : Créer un CRUD API
Eric Le Codeur
Posted on October 30, 2021
Voici une série d'articles qui vous permettra créer des applications backend avec NodeJS + Express.
Cette série est la suite de ma série sur les bases de NodeJS. Si vous n'avez pas les connaissances de bases en NodeJS lisez cette série d'abord : Introduction à NodeJS
Node.js est aujourd'hui un incontournable, il est donc essentiel pour un développeur de le maitriser.
Je vais donc publier un nouvel article environ au deux jours et petit à petit vous apprendrez tout ce qu'il y a à savoir sur Node.js + Espress
Pour ne rien manquer suivez moi sur twitter : https://twitter.com/EricLeCodeur
CRUD API
Maintenant que nous connaissons les concepts de base, il est temps de construire une véritable API CRUD (créer, lire, mettre à jour, supprimer)
Nous allons construire toutes ces routes CRUD :
Create: POST /api/products
Read all: GET /api/products
Read: GET /api/product/1
Update: PUT /api/products/1
Delete: DELETE /api/products/1
Return response status
Avec une API CRUD vous pouvez retourner des données mais aussi un code statut.
Voici une liste de certains codes status et leur signification
res.status(200) // Ok
res.status(201) // Created
res.status(204) // No content
res.status(400) // Bad request
res.status(401) // Unauthorized
res.status(403) // Forbidden
res.status(404) // Not found
res.status(500) // Server error
Créez le fichier "data.js" et copiez/collez ce code
const products = [
{ id: 1, name: 'iPhone', price: 800 },
{ id: 2, name: 'iPad', price: 650 },
{ id: 3, name: 'iWatch', price: 750 }
]
module.exports = products
Charger les données et démarrer le serveur
const express = require('express')
const app = express()
const products = require('./data.js')
app.listen(5000, () => {
console.log('server is listening on port 5000')
})
Create: POST /api/products
app.use(express.json()) // parse json body content
app.post('/api/products', (req, res) => {
const newProduct = {
id: products.length + 1,
name: req.body.name,
price: req.body.price
}
products.push(newProduct)
res.status(201).json(newProduct)
})
app.use(express.json) est un middleware qui prend le contenu JSON et crée les propriétés req.body associées. (ex. req.body.name et req.body.price)
Le res.status(201).json(newProduct) définit le status de la réponse de retour sur 201 (créé) et renvoie également les données newProduct en format JSON.
Read all: GET /api/products
app.get('/api/products', (req, res) => {
res.json(products)
})
Read: GET /api/product/1
app.get('/api/products/:productID', (req, res) => {
const id = Number(req.params.productID)
const product = products.find(product => product.id === id)
if (!product) {
return res.status(404).send('Product not found')
}
res.json(product)
})
Comme vu dans la partie 2, nous avons d'abord récupéré le productID du router parameter.
Ensuite, nous vérifions si ce produit existe et envoyons une réponse en conséquence.
res.json(product) envoie le produit au format JSON avec un code d'état 200 ok.
Update: PUT /api/products/1
app.use(express.json()) // parse json body content
app.put('/api/products/:productID', (req, res) => {
const id = Number(req.params.productID)
const index = products.findIndex(product => product.id === id)
if (index === -1) {
return res.status(404).send('Product not found')
}
const updatedProduct = {
id: products[index].id,
name: req.body.name,
price: req.body.price
}
products[index] = updatedProduct
res.status(200).json('Product updated')
})
Delete: DELETE /api/products/1
app.use(express.json()) // parse json body content
app.delete('/api/products/:productID', (req, res) => {
const id = Number(req.params.productID)
const index = products.findIndex(product => product.id === id)
if (index === -1) {
return res.status(404).send('Product not found')
}
products.splice(index,1)
res.status(200).json('Product deleted')
})
Conclusion
C'est tout pour aujourd'hui, suivez moi sur twitter : https://twitter.com/EricLeCodeur afin d'être avisé de la parution du prochain article (d'ici deux jours).
Posted on October 30, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.