Express Avaliador: validação Personalizada com funções assíncronas

0

Pergunta

Atualmente estou tentando validar algumas entradas na Express usando express-avaliador. Eu sei que é típico para passá-lo como um middleware para a rota, mas eu precisava de acesso para o res objeto, de modo que eu tinha que escrever isso na forma como a que você vê abaixo.

A parte que eu estou lutando com é o custom avaliador. Eu gostaria de chamar uma função assíncrona store.todoListTitleExists(title) que consulta um banco de dados e verifica se o título já existe. Se o título não existe, a minha intenção é salvar uma mensagem de erro, que eu mais tarde pode se apresentar como uma mensagem flash.

Atualmente, esse código não funciona. Eu olhei através da documentação, mas eu não consigo descobrir como fazer esse validador personalizado + mensagem de erro funcionar corretamente, pois ele chama uma função assíncrona. Qualquer ajuda seria apprecated.

Obrigado!

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

Melhor resposta

0

tente isso

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-avaliador destina-se a limpar e validar os dados enviados entre o cliente e o servidor. A fim de lidar com isso de uma forma que é escalável eu recomendaria o uso de um arquivo para lidar com todos os seus sites de solicitações post (algo como routes.js por exemplo).

Aqui está um exemplo de roteador personalizado que exibe uma mensagem de erro se a validação falhar :

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

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

        return true

    }),

Uma vez que você tenha isolado de tudo o encaminhamento para um arquivo específico, você pode adicionar argumentos como o exemplo a seguir para mensagens de erro para ser servido com a página (personnaly eu uso ejs modelos para essas mensagens de erro são exibidas usando o seguinte código :

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

Em outros idiomas

Esta página está em outros idiomas

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