Search code examples
adonis.jsadonisjs-ace

ADONISJS: validate some data outside the HTTP request in


This is my validator class

 import { schema, rules } from "@ioc:Adonis/Core/Validator";
    import { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";
    
    export default class CreateUserValidator {
      constructor(protected ctx: HttpContextContract) {}
    
      schema = schema.create({
        lat: schema.string({}, [
          rules.regex(/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/),
        ]),
    
        lng: schema.string({}, [
          rules.regex(/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/),
        ]),
        radius: schema.number(),
        distance: schema.number(),
      });
    
      public messages = {};
    }

This is my controller

import { validator } from '@ioc:Adonis/Core/Validator'
import CreateUser from 'App/Validators/CreateUserValidator'

public async station({
    request,
    response,
  }: HttpContextContract) {
    let inputs: any = await EncyptionManager.decrypt(request.body().inputs);
    inputs = JSON.parse(inputs);

    await validator.validate(
      new CreateUser({
        lat: ainputs.lat,
        long: ainputs.lat,
        radius: ainputs.radius,
        distance: ainputs.distance,
      })
    );
    
    console.log(inputs)

Simply, I want to validate lat, long, radius, and distance using the validator classes outside of the HTTP request.


Solution

  • Coz validator constructor is asking for ctx and we are passing data We have to update the validator constructor and remove the dependency on ctx and accept data

    Now my Validator accept the data

    import { schema, rules } from "@ioc:Adonis/Core/Validator";
        import { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";
        
        export default class CreateUserValidator {
          constructor() {}
        
          schema = schema.create({
            lat: schema.string({}, [
              rules.regex(/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/),
            ]),
        
            lng: schema.string({}, [
              rules.regex(/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/),
            ]),
            radius: schema.number(),
            distance: schema.number(),
          });
        
          public messages = {};
        }