Express Validator: validazione Personalizzati con funzioni asincrone

0

Domanda

Attualmente sto cercando di validare alcuni ingressi in Express utilizzando express-validator. So che è tipico di passare come un separato middleware in una rotta, ma ho bisogno di accedere al res oggetto, ho avuto modo di scrivere nel modo che vedete qui sotto.

La parte che sto lottando con il custom validatore. Mi piacerebbe chiamare una funzione asincrona store.todoListTitleExists(title) che esegue una query su un database e controlla se un titolo già esistente. Se il titolo non esiste, la mia intenzione è quella di salvare un messaggio di errore che mi possono poi visualizzare un messaggio flash.

Attualmente, questo codice non funziona. Ho guardato attraverso la documentazione, ma non riesco a capire come fare questo custom validator + messaggio di errore funzionare correttamente perché chiama una funzione asincrona. Qualsiasi aiuto sarebbe apprecated.

Grazie!

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

Migliore risposta

0

prova questo

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 è inteso per l'igienizzazione e la validazione dei dati inviati tra il client e il server. Per gestire questo in un modo che è scalabile mi consiglia di utilizzare un file per gestire tutti i tuoi siti, le richieste post (qualcosa di simile routes.js per fare un esempio).

Ecco un esempio di un router personalizzato che consente di visualizzare un messaggio di errore se la convalida non riesce :

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

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

        return true

    }),

Una volta isolati, tutti i routing di un file specifico, è possibile aggiungere argomenti come l'esempio riportato di seguito per i messaggi di errore per essere servito con la pagina (personnaly io uso ejs modelli in modo che questi messaggi di errore vengono visualizzati utilizzando il seguente codice :

**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

In altre lingue

Questa pagina è in altre lingue

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