Express Validador: validación Personalizada con funciones asincrónicas

0

Pregunta

Actualmente estoy tratando de validar algunos de los insumos de manera Expresa el uso de express-validador. Sé que es típico para pasar como un tema independiente de middleware en la ruta, pero yo necesitaba el acceso a la res objeto, de modo que tenía que escribirlo en la forma en la que ves a continuación.

La parte que estoy luchando con el custom validador. Me gustaría que se llame a una función asíncrona store.todoListTitleExists(title) las consultas de base de datos y comprueba si el título ya existe. Si el título no existe, mi intención es guardar un mensaje de error que puedo posterior de la pantalla como un mensaje flash.

En la actualidad, este código no funciona. He mirado a través de la documentación, pero me parece que no puede averiguar cómo hacer que este validador personalizado + mensaje de error funcione correctamente, ya que llama a una función asíncrona. Cualquier ayuda sería apprecated.

Gracias!

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

Mejor respuesta

0

intente esto

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-validador está diseñado para desinfectar y validar los datos enviados entre el cliente y el servidor. Con el fin de manejar esto de una manera que es escalable, me gustaría recomendar el uso de un archivo para manejar todos tus sitios peticiones post (algo así como routes.js por ejemplo).

Aquí está una muestra personalizada de router que se muestra un mensaje de error si falla la validación :

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

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

        return true

    }),

Una vez que se ha aislado de toda la ruta a un archivo específico, usted puede agregar argumentos como el siguiente ejemplo para los mensajes de error para ser servido con la página (personnaly uso ejs plantillas por lo que estos mensajes de error se muestran usando el siguiente 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

En otros idiomas

Esta página está en otros idiomas

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