Express Validator: Vlastné potvrdenie s asynchrónnym funkcie

0

Otázka

Ja som v súčasnej dobe snaží overiť niektoré vstupy v Express pomocou express-validator. Viem, že je to typické odovzdať ju ako samostatný middleware do trasy, ale potreboval som prístup k res objekt, tak som musel ho napísať do spôsob, ako môžete vidieť nižšie.

Časť, ktorú som zápasí s je custom validator. Rád by som sa to volať asynchrónne funkcia store.todoListTitleExists(title) že dopytov na databázu a skontroluje, či názov už existuje. Ak názov neexistuje, mojím zámerom je zachrániť chybové hlásenie, ktoré som si neskôr displej ako blesková správa.

V súčasnej dobe, tento kód nefunguje. Díval som sa cez dokumentáciu, ale ja nedokážem vymyslieť, ako urobiť tento custom validator + chybové hlásenie správne fungovať, pretože je hovory asynchrónne funkciu. Pomôcť by apprecated.

Vďaka!

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

Najlepšiu odpoveď

0

skúste tento

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 je určený na čistenie bazénov a overiť údaje odosiela medzi klientom a serverom. V snahe riešiť tento problém tak, že je škálovateľné by som odporučil pomocou súboru, aby zvládol všetky vaše webové stránky post žiadostí (niečo ako routes.js pre príklad).

Tu je ukážka vlastný router, ktorý sa zobrazí chybové hlásenie, ak overenie zlyhá :

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

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

        return true

    }),

Akonáhle budete mať izolované všetky smerovanie na konkrétny súbor, môžete pridať argumenty ako príklad pre chybové hlásenia, ktoré sa podáva s stránke (personnaly používam ejs šablóny, takže tieto chybové hlásenia sa zobrazujú pomocou nasledujúci kód :

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

V iných jazykoch

Táto stránka je v iných jazykoch

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