NodeJS + Express partie 4 : Créer un CRUD API
Tags: javascript, node, express, beginners
Published: 2021-10-30 11:43:51

---
title: NodeJS + Express partie 4 : Créer un CRUD API
description: 
published: true
tags: javascript, nodejs, express, beginner
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7bt4zwvwoctmke0p36op.png
series: expressJS
---

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](https://dev.to/ericlecodeur/creer-un-backend-en-javascript-introduction-a-node-js-3014)

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

<hr>
### 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
```jsx
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
```js
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

```jsx
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

```jsx
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
```jsx
app.get('/api/products', (req, res) => {
    res.json(products)
})
```

### Read: GET /api/product/1
```jsx
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

```jsx
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

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