Développer une API Rest avec NodeJS, Express et MongoDB: #2 Mon premier serveur
Published: 2022-09-12 17:24:40

---
title: Développer une API Rest avec NodeJS, Express et MongoDB: #2 Mon premier serveur 
published: true
description: Serveur de cafè ? non, serveur de trucs aussi bons que des cafès, enfin ca depend de ce que je fais comme appli bien évidemment.
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
---

Maintenant que j'ai préparé mon projet ExpressJS, je peux m'ateler à créer mon premier serveur.

Toujours dans mon terminal, sous le dosser `blitz-node/` ou un autre nom si jamais t'as choisis autre chose que ce que je propose (bravo!).

Sous Visual Studio Code, je crée un fichier `server.js`. Je mets ce code-ci:

```js
// 1. J'importe ExpressJS ainsi que JSON
import express, { json } from "express"

// 2. J'initialise une nouvelle application Express
const app = express()

// 3. J'utilise le plugin JSON 
// permet de renvoyer des JSON stylés
// plutot que des chaines de caracteres éclatées au sol
app.use(json())

// 4. Lorsque quelqu'un (ou quelqu'une) fait appel à `/`
// comme `http://MON_IP:PORT/`, alors je fais ci et ca
app.get("/", (request, response) => {
  response.statusCode = 200
  response.send({ message: "Mon premier JSON!" })
})

// 5. J'attache mon serveur à un port: le `3000`,
// ca aurait pu etre n'importe quoi d'autre, 1234, 6969 (hhhum...)
app.listen(3000, () => {
  console.log(`Server Started at http://localhost:${3000}`)
})
```

Maintenant, je vais faire une petite mondification au fichier `package.json`

Le `package.json` permet de faire tout un tas de trucs assez sympas:
- Lister mes dépendances comme ca je n'ai pas a me trimbaler un dossier à la con avec mes dependances
- Configurer des libraries
- Nom, infos (osef)
- Ma préférée, faire des scripts custom.

Allez, j'ajoute un nouveau script pour démarrer mon serveur:

```json
 "scripts": {
    "start": "nodemon server.js"
  },
```

Ca ressemble à ca du coup:
```json
{
  "name": "blitz",
  "version": "1.0.0",
  "scripts": {
    "start": "nodemon server.js"
  },
  "dependencies": {
    "dotenv": "^16.0.2",
    "express": "^4.18.1",
    "mongoose": "^6.5.4",
    "nodemon": "^2.0.19"
  },
  "type": "module"
}
```

Maintenant je peux aller repartir dans mon terminal et lancer tout ce beau monde 🚀:

```bash
npm start
```

J'ai ca dans mon terminal du coup:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z5egxrmmjwkotu10ii1p.png)


Nickel, je ne touche à rien, mon serveur tourne normalement, je peux visiter http://localhost:3000, j'ai ca:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnl88t6ucjf2ux1vxawm.png)

Pour avoir ce joli formatage, au lieu de ca (eurrk):

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ykyr332kh4fevjq11foq.png)

J'utilise cette extension: [JSON Formatter](https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa?hl=en)

Ce qui se passe du coup c'est ceci:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/758fbwogl2uge9ffzhdf.jpg)

Allez on en rajoute juste une pour la route, mais sans expliquer, un petit peu comme le `à suivre`à la con dans les séries.

J'ajoute ce bout de code dans mon `server.js`:

```js
app.get("/champions", (request, response) => {
  response.statusCode = 200
  response.send([{ name: "Graves" }, { name: "Rengar" }])
})
```

Du coup ca donne ca:
```js
import express, { json } from "express"

const app = express()

app.use(json())

app.get("/", (request, response) => {
  response.statusCode = 200
  response.send({ message: "Mon premier JSON!" })
})

app.get("/champions", (request, response) => {
  response.statusCode = 200
  response.send([{ name: "Graves" }, { name: "Rengar" }])
})

app.listen(3000, () => {
  console.log(`Server Started at http://localhost:${3000}`)
})
```

Vu que j'ai installé `nodemon`, je serveur va se refresh automatiquement.

Alors si j'anticipe bien, je dois-m'attendre à la reponse que si je vais sur `http://localhost:3000/champions` ?

C'est exactement ca!

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vqezjmahgff2bkwri9og.png)

Allez, on se revois dans la suite: [#3 Les verbes HTTP](https://dev.to/sidali/developper-une-api-rest-avec-nodejs-express-et-mongodb-3-les-verbes-http-ko6)!