Express Validator: validare Personalizate cu funcții asincron

0

Problema

Eu sunt în prezent încearcă să valideze unele intrări în Exprime folosind express-validator. Știu că e normal să-l treacă ca o separat middleware în traseu, dar am nevoie de acces la res obiect, așa că a trebuit să-l scrie în felul în care vezi mai jos.

Partea care mă lupt cu custom validator. Mi-ar place pentru a apela o funcție asincron store.todoListTitleExists(title) care interoghează o bază de date și verifică dacă un titlu deja există. Dacă titlul nu exista, intenția mea este de a salva un mesaj de eroare care pot afișa mai târziu ca un mesaj instantaneu.

În prezent, acest cod nu merge. M-am uitat prin documentația dar eu nu pot par să dau seama cum să facă acest obicei validator + mesaj de eroare de lucru în mod corespunzător, deoarece solicită o funcție asincron. Orice ajutor ar fi apprecated.

Multumesc!!!

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

Cel mai bun răspuns

0

încercați acest lucru

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

Exprima-validator este destinat pentru a steriliza și valida datele transmise între client și server. În scopul de a gestiona acest lucru într-un mod care este scalabil mi-ar recomandăm să utilizați un fișier care să se ocupe de site-uri cereri post (ceva de genul routes.js de exemplu).

Aici este un eșantion personalizate router-ul care afișează un mesaj de eroare dacă de validare nu reușește :

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

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

        return true

    }),

După ce ați izolat toate rutare a unui anumit fișier, puteți adăuga argumente ca în exemplu de mai jos pentru mesaje de eroare pentru a fi servit cu pagina (personal folosesc ejs șabloane astfel încât aceste mesaje de eroare sunt afișate folosind următorul cod :

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

În alte limbi

Această pagină este în alte limbi

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