Express Validator: Zaman uyumsuz işlevlerle özel doğrulama

0

Soru

Şu anda express-validator kullanarak Express'teki bazı girdileri doğrulamaya çalışıyorum. Bunu rotaya ayrı bir ara katman olarak geçirmenin tipik olduğunu biliyorum, ancak res itiraz ediyorum, bu yüzden aşağıda gördüğünüz şekilde yazmak zorunda kaldım.

Mücadele ettiğim kısım şu: custom doğrulayıcı. Eşzamansız bir işlevi çağırmasını istiyorum store.todoListTitleExists(title) bu, bir veritabanını sorgular ve bir başlığın zaten var olup olmadığını denetler. Başlık yoksa, niyetim daha sonra bir flash mesajı olarak görüntüleyebileceğim bir hata mesajını kaydetmektir.

Şu anda bu kod çalışmıyor. Belgelere baktım, ancak bu özel doğrulayıcı + hata mesajının eşzamansız bir işlevi çağırdığı için düzgün çalışmasını nasıl sağlayacağımı anlayamıyorum. Herhangi bir yardım apprecated olacaktır.

Teşekkürler!

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

En iyi cevabı

0

bunu dene

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, istemci ve sunucu arasında gönderilen verileri sterilize etmek ve doğrulamak için tasarlanmıştır. Bunu ölçeklenebilir bir şekilde ele almak için, tüm site post isteklerinizi işlemek için bir dosya kullanmanızı öneririm (örneğin routes.js mesela).

Doğrulama başarısız olursa hata iletisi görüntüleyen örnek bir özel yönlendirici aşağıdadır :

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

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

        return true

    }),

Tüm yönlendirmeyi belirli bir dosyaya ayırdıktan sonra, sayfayla birlikte sunulacak hata iletileri için aşağıdaki örnekteki gibi bağımsız değişkenler ekleyebilirsiniz (kişisel olarak ejs şablonlarını kullanıyorum, böylece bu hata iletileri aşağıdaki kod kullanılarak görüntülenir :

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

Diğer dillerde

Bu sayfa diğer dillerde

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