Express-validator: Niestandardowa kontrola z asynchronicznymi funkcjami

0

Pytanie

Obecnie staram się sprawdzić niektóre dane wejściowe w Express za pomocą express-walidator. Wiem, że zazwyczaj przekazują jako nowy intercooler oprogramowanie w trasę, ale potrzebny mi był dostęp do res sprzeciw, więc musiałem to napisać tak, jak widać poniżej.

Ta część, z którą walczę, to custom validator. Chciałbym, aby sprawiał asynchronicznej funkcji store.todoListTitleExists(title) to kwerendę bazy danych i sprawdzić, czy istnieje już tytuł. Jeśli nagłówek nie istnieje, zamierzam zapisać się komunikat o błędzie, który później mogę wyświetlić w postaci flash wiadomości.

Obecnie ten kod nie działa. Przejrzałem dokumentację, ale, jak się wydaje, nie mogę zrozumieć, jak zmusić ten walidator niestandardowy + komunikat o błędzie działać prawidłowo, ponieważ powoduje asynchroniczne funkcję. Każda pomoc będzie mile widziana.

Dziękuję!

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

Najlepsza odpowiedź

0

spróbuj to

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 jest przeznaczony do czyszczenia i sprawdzania poprawności danych przesyłanych pomiędzy klientem a serwerem. Aby poradzić sobie z tym elastyczny sposób, polecam użyć pliku do obsługi wszystkich żądań na publikację swoich stron internetowych (coś jak routes.js na przykład).

Oto przykład interfejsu routera, który wyświetla komunikat o błędzie w przypadku awarii sprawdzenia :

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

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

        return true

    }),

Jak tylko изолируете całą routing w określony plik, można dodać argumenty podobne do poniższego przykładu, dla komunikatów o błędach, które będą wyświetlane wraz ze stroną (osobiście używam szablony ejs, więc te komunikaty o błędach są wyświetlane za pomocą następującego kodu :

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

W innych językach

Ta strona jest w innych językach

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