DEV Community

Cover image for NodeJS + Express partie 4 : Créer un CRUD API
 Eric Le Codeur
Eric Le Codeur

Posted on

NodeJS + Express partie 4 : Créer un CRUD API

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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')
})
Enter fullscreen mode Exit fullscreen mode

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)
})
Enter fullscreen mode Exit fullscreen mode

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)
})
Enter fullscreen mode Exit fullscreen mode

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)
})
Enter fullscreen mode Exit fullscreen mode

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')
})
Enter fullscreen mode Exit fullscreen mode

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')
})
Enter fullscreen mode Exit fullscreen mode

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).

Discussion (0)