Express programme de validation: validation Personnalisée avec asynchrone fonctions

0

La question

Je suis en train d'essayer de valider des entrées dans l'Express à l'aide d' express-validator. Je sais que c'est typique de passer comme middleware dans la route, mais j'avais besoin de l'accès à l' res objet, donc j'ai dû l'écrire dans la façon dont vous voyez ci-dessous.

La partie que je suis aux prises avec la custom programme de validation. J'aimerais qu'il appel une fonction asynchrone store.todoListTitleExists(title) qui interroge une base de données et vérifie si le titre existe déjà. Si le titre n'existe pas, mon intention est d'enregistrer un message d'erreur qui je puisse ensuite s'afficher comme un message flash.

Actuellement, ce code ne fonctionne pas. J'ai regardé à travers la documentation, mais je n'arrive pas à comprendre comment faire ce validateur personnalisé + message d'erreur fonctionne correctement depuis qu'il appelle une fonction asynchrone. Toute aide serait apprecated.

Merci!

app.post("/lists/:todoListId/edit", 
    (req, res) => {
    let store = res.locals.store;
    let todoListId = req.params.todoListId;
    let title = req.body.todoListTitle;

    await body('todoListTitle')
          .trim()
          .isLength({ min: 1 })
          .withMessage("The list title is required.")
          .isLength({ max: 100 })
          .withMessage("The list title cannot be over 100 characters")
          .custom(store.todoListTitleExists(title).then(titleExists => {
            if(titleExists) return Promise.reject('Title already exists');
          }))
2

La meilleure réponse

0

essayez ceci

body("feildName", "Feild must be selected")
.custom(value=> {

    titleExists=await store.todoListTitleExists(value)
    if(titleExists){
    Promise.reject('title exists')
    }
    return true


    return true

}),
2021-12-24 05:31:48
-1

Express-validator est destiné à désinfecter et de valider les données transmises entre le client et le serveur. Afin de gérer cela dans une manière qui est évolutif, je vous conseille d'utiliser un fichier pour gérer l'ensemble de vos sites requêtes post (quelque chose comme routes.js pour exemple).

Voici un échantillon personnalisé routeur qui affiche un message d'erreur si la validation échoue :

body("feildName", "Feild must be selected")
    .custom(val => {

        if (val.feildName == "Select...") return false

        return true

    }),

Une fois que vous avez isolé le routage dans un fichier spécifique, vous pouvez ajouter des arguments comme dans l'exemple ci-dessous pour les messages d'erreur pour être servi avec la page (moi j'ai utiliser ejs modèles pour ces messages d'erreur sont affichés en utilisant le code suivant :

**controller.js**
    const errors = validationResult(req);
    const {
        body
    } = req;

    if (!errors.isEmpty()) {
        return res.render('index', {
            error: errors.array()[0].msg
        });
    }

    res.render("index");

**index.ejs**
<div class="error">
        <% if(typeof error !== 'undefined'){ %>
              <div class="err-msg"><%= error %></div>
        <% } %>
</div>
2021-11-23 19:09:05

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................