Apprenez à valider les données entrant en tant qu'entrée dans vos points de terminaison Express
Supposons que vous ayez un point de terminaison POST qui accepte le nom, l'adresse e-mail et les paramètres d'âge:
const express = require('express')
const app = express()
app.use(express.json())
app.post(’/form’, (req, res) => {
const name = req.body.name
const email = req.body.email
const age = req.body.age
})
Comment effectuez-vous la validation côté serveur de ces résultats pour vous assurer:
- nom est une chaîne d'au moins 3 caractères?
- l'email est un vrai email?
- l'âge est un nombre, entre 0 et 110?
La meilleure façon de gérer la validation sur tout type d'entrée provenant de l'extérieur dans Express est d'utiliser leexpress-validator
paquet:
npm install express-validator
Vous avez besoin ducheck
etvalidationResult
objets du package:
const { check, validationResult } = require('express-validator');
Nous passons un tableau decheck()
appelle comme deuxième argument dupost()
appeler. Chaquecheck()
call accepte le nom du paramètre comme argument. Puis nous appelonsvalidationResult()
pour vérifier qu'il n'y a pas eu d'erreurs de validation. S'il y en a, nous leur disons au client:
app.post('/form', [
check('name').isLength({ min: 3 }),
check('email').isEmail(),
check('age').isNumeric()
], (req, res) => {
const errors = validationResult(req)
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() })
}
const name = req.body.name
const email = req.body.email
const age = req.body.age
})
Remarquez que j'ai utilisé
isLength()
isEmail()
isNumeric()
Il existe de nombreuses autres méthodes, toutes issues devalidator.js, y compris:
contains()
, vérifiez si la valeur contient la valeur spécifiéeequals()
, vérifiez si la valeur est égale à la valeur spécifiéeisAlpha()
isAlphanumeric()
isAscii()
isBase64()
isBoolean()
isCurrency()
isDecimal()
isEmpty()
isFQDN()
, est un nom de domaine pleinement qualifié?isFloat()
isHash()
isHexColor()
isIP()
isIn()
, vérifiez si la valeur est dans un tableau de valeurs autoriséesisInt()
isJSON()
isLatLong()
isLength()
isLowercase()
isMobilePhone()
isNumeric()
isPostalCode()
isURL()
isUppercase()
isWhitelisted()
, vérifie l'entrée par rapport à une liste blanche de caractères autorisés
Vous pouvez valider l'entrée par rapport à une expression régulière en utilisantmatches()
.
Les dates peuvent être vérifiées en utilisant
isAfter()
, vérifiez si la date saisie est postérieure à celle que vous passezisBefore()
, vérifiez si la date saisie est antérieure à celle que vous passezisISO8601()
isRFC3339()
Pour plus de détails sur l'utilisation de ces validateurs, reportez-vous àhttps://github.com/chriso/validator.js#validators.
Tous ces contrôles peuvent être combinés en les canalisant:
check('name')
.isAlpha()
.isLength({ min: 10 })
En cas d'erreur, le serveur envoie automatiquement une réponse pour communiquer l'erreur. Par exemple si l'email n'est pas valide, voici ce qui sera retourné:
{
"errors": [{
"location": "body",
"msg": "Invalid value",
"param": "email"
}]
}
Cette erreur par défaut peut être remplacée pour chaque contrôle que vous effectuez, en utilisantwithMessage()
:
check('name')
.isAlpha()
.withMessage('Must be only alphabetical chars')
.isLength({ min: 10 })
.withMessage('Must be at least 10 chars long')
Et si vous voulez écrire votre propre validateur spécial et personnalisé? Vous pouvez utiliser lecustom
validateur.
Dans la fonction de rappel, vous pouvez rejeter la validation soit en lançant une exception, soit en renvoyant une promesse rejetée:
app.post('/form', [
check('name').isLength({ min: 3 }),
check('email').custom(email => {
if (alreadyHaveEmail(email)) {
throw new Error('Email already registered')
}
}),
check('age').isNumeric()
], (req, res) => {
const name = req.body.name
const email = req.body.email
const age = req.body.age
})
Le validateur personnalisé:
check('email').custom(email => {
if (alreadyHaveEmail(email)) {
throw new Error('Email already registered')
}
})
peut être réécrit comme
check('email').custom(email => {
if (alreadyHaveEmail(email)) {
return Promise.reject('Email already registered')
}
})
Téléchargez mon gratuitManuel Express.js
Plus de tutoriels express:
- Express, un framework Node.js populaire
- Récupérer les paramètres de chaîne de requête GET à l'aide d'Express
- Validation de l'entrée dans Express à l'aide du validateur express
- Modèles Express
- Servir des actifs statiques avec Express
- Envoyer une réponse JSON à l'aide d'Express
- Sessions express
- Envoyer une réponse à l'aide d'Express
- Envoyer des fichiers à l'aide d'Express
- Désinfection des entrées dans Express à l'aide du validateur express
- Routage dans Express
- Un serveur HTTPS Express avec un certificat auto-signé
- Express, paramètres de demande
- Récupérer les paramètres de requête POST à l'aide d'Express
- Gérer les redirections avec Express
- Intergiciel express
- Configurer Let's Encrypt pour Express
- Utiliser les en-têtes HTTP dans Express
- Gestion des formulaires dans Express
- Gestion des téléchargements de fichiers dans les formulaires à l'aide d'Express
- Gestion de CORS dans Express
- Gérer les cookies avec Express