如何在Adonis/Node.js中创建自定义验证器?

3

实际上,我在控制器中有一个名为store(){}的函数,该函数进行了多个验证,并返回特定的响应状态。我在考虑是否存在一种方法,可以在create()方法之前导入这些验证并进行测试。

目前我的代码是这样的:

async store ({ request, response }) {

    const qt_options_menor_0 = this.verificaOptionsMenor0(request.body.qt_options)
    if(qt_options_menor_0){
      return response
      .status(406)
      .json({ message: "Não é possível cadastrar quantidade de opções menor que 0" });
    }

    const qt_options_igual_0 = this.verificaOptionsIgual0(request.body.qt_options)
    if(qt_options_igual_0)
      return response
      .status(406)
      .json({ message: "Não é possível cadastrar quantidade de opções igual a 0" });

 const parameter = {
      ...request.all(),
      user_id: request.user_id
    }
    const parametroCriado = await Parameter.create(parameter)
    return parametroCriado
  }

       verificaQtQuizSendIgual0(qt_quiz_send){
    if(qt_quiz_send === 0){
      return true
    }else{
      return false
    }
  }

  verificaOptionsMenor0(qt_options){
    if(qt_options < 0){
      return true
    }else{
      return false
    }
  }

这样我的控制器代码很长,有更好的方法吗?

1个回答

2
您可以使用Adonis验证器。
例如:
验证器文件
'use strict'

class Option {
  get rules() {
    return {
      // Your rules
    }
  }

  get messages() {
    var antl = this.ctx.antl;
    return {
       // Custom messages
    }
  }

  async fails(errorMessages) {
    return this.ctx.response.status(406).json({ message: "Não é possível cadastrar quantidade de opções menor que 0" });
  }
}

module.exports = Option

命令

> adonis make:validator Option

使用验证器- start/route.js
...
Route
  ...
  .validator('Option')

1
当我使用.validator('MyValidator')时,我收到了以下错误信息:"未解决的函数或方法validator(),你知道这是怎么回事吗?" - bla
1
这是我的代码:https://media.discordapp.net/attachments/643407991155982336/654404772815831052/unknown.png - bla
嗨,(我不知道这是否有效)尝试在“中间件”之前放置“验证器”。 - crbast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接