This content originally appeared on DEV Community 👩💻👨💻 and was authored by Sid Ali BENTIFRAOUINE
Ce qu'on va utiliser
Express
C'est une librairie NodeJS qui rend le fait de créer un serveur REST super facile. Très léger, il nous permet de faire les choix que l'on veut, c'est un très bon point de depart pour celles et ceux qui veulent apprendre Node.
Un ORM
Au lieu d'écrire une requete SQL qui casse les couilles, je me contente tout simplement d'ordonner des choses à mon ORM et lui va traduire ce que je peux en une requete SQL qui va bien.
Plus jamais tu écriras ce genre de trucs:
SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
{ UNION | INTERSECT | EXCEPT }
ORDER BY expression
LIMIT count
OFFSET start
Prisma
En parlant d'ORM justement, Prisma fait partie des plus modernes et plus simples à utiliser. Il propose une définition de schema (la gueule que va avoir mon User, ma Voiture...etc...) intuitive.
Il gére les migrations, qui est le fait de claquer mon schema en base sans écrire moi-meme les requetes SQL qu'il faut.
JSON Web Token
JWT est une facon de gérer l'authentification, c'est un peu la plus utilisée aujourd'hui car graces au devs fronts chiants comme moi, nous avons une séparation entre le Front et le Back (deux repos, serveurs differents) du coup plus question d'uiliser les cookie. En gros on fait passer un Token qui est une sorte de code (une succession de clin d'oeils que reconnaitra mon serveur).
C'est une phrase cryptés que le back saura décrypter et que le client sauvegardera en faisant gaffe à ne jamais la reveler à qui que ce soit, du moins tant qu'elle est valable.
Initialisation du projet
Dans mon terminal:
mkdir levideur # Parce que je vais ce que je veux
cd levideur
On initialise un projet TypeScript (parce que TypeScript c'est bien)
npm init -y
npm install typescript ts-node @types/node --save-dev
Faut ajouter ce fichier aussi tsconfig.json
:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
Maintenant, je peux installer prisma
:
npm install prisma --save-dev
On peut intialiser Prisma:
npx prisma init --datasource-provider sqlite
Je prends une BD SQLite car c'est plus rapide à Setup pas besoin d'installer quoi que ce soit mais ca reste du SQL.
Mon premier Schema
Un Schema est une maniere de décrire la gueule d'une donnée.
Dans le fichier prisma/schema.prisma
, j'ajoute:
model User {
id Int @id @default(autoincrement())
email String @unique
password String
}
Maintenant que j'ai décris les tables de ma base, je suis pret à claquer ces infos dans ma abse de donnée:
npx prisma migrate dev --name init
C'est good! nous sommes prets à utiliser notre base.
Je crée un fichier main.ts
:
// main.ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
email: 'me@sidali.dev',
password: '123456'
},
})
console.log(user)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
Est-ce que tout marche, dans mon terminal:
npx ts-node main.ts
Nickel! 🔥
Le code est ici: Repo du videur
Place au serveur
Dans mon terminal:
npm i express jsonwebtoken cors
npm i -D morgan
- cors: permettre des appels en dehors du domaine où est hébérgé le serveur.
- morgan: pour les logs
import express from "express"
import morgan from "morgan"
import cors from "cors"
import { PrismaClient } from "@prisma/client"
const PORT = 1234
// Initialisation de Express 4
const app = express()
// Activation de CORS pour les CORS...
app.use(cors())
// Activation de Morgan pour les logs
app.use(morgan("tiny"))
// Activation du raw (json)
app.use(express.json())
// Activation de x-wwww-form-urlencoded
app.use(express.urlencoded({ extended: true }))
// Initialisation du client Prisma
const prisma = new PrismaClient()
// Requete GET /
app.get("/", async (req, res) => {
const users = await prisma.user.findMany()
res.send(users)
})
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}.`)
})
Je lance mon serveur du coup;
npx ts-node main.ts
Je visite (http://localhost:1234/) et c'est good:
Inscription
On va créer la route /signup
qui va prendre en dans sa requete l'email et le mot de passe. Si c'est ta premiere API REST, grosso modo une application Mobile ou une appli Web (moderne) va envoyer des requetes vers le serveur et le serverur réponds, ex: j'envois l'email et le mdp, le serveur me répond avec un OK ou KO.
À ne pas oublier! Pour tester les appels vers notre API l'idéal est d'installer Insomnia ou Postman
Connexion
This content originally appeared on DEV Community 👩💻👨💻 and was authored by Sid Ali BENTIFRAOUINE
Sid Ali BENTIFRAOUINE | Sciencx (2022-10-28T20:35:33+00:00) Authentification avec Express et PrismaDB. Retrieved from https://www.scien.cx/2022/10/28/authentification-avec-express-et-prismadb/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.