You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AdonisJS如何在HTTP请求场景外使用验证器类校验指定数据

首先你当前代码存在两个明显错误需要先修正:

  1. 验证器构造函数接收的是HTTP上下文对象,你把待校验的字段直接传入构造函数的写法是错误的
  2. 验证器中定义的经纬度字段是lng,你传参时写的long字段名不匹配,且代码中存在ainputs的笔误

实现步骤

方式1:不修改原有验证器类,直接模拟空上下文调用

因为你当前的验证器逻辑完全没有用到上下文对象,只需要在实例化时传入空对象满足构造函数要求即可,代码如下:

import { validator } from '@ioc:Adonis/Core/Validator'
import CreateUserValidator from 'App/Validators/CreateUserValidator'
import type { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";

// 这是你待校验的任意数据源,不需要来自HTTP请求
const dataToValidate = {
  lat: "30.1234",
  lng: "120.5678",
  radius: 1000,
  distance: 500
}

try {
  const validated = await validator.validate({
    schema: new CreateUserValidator({} as HttpContextContract).schema,
    data: dataToValidate,
    messages: new CreateUserValidator({} as HttpContextContract).messages
  })
  // 校验通过,validated就是处理后的数据
  console.log(validated)
} catch (error) {
  // 校验失败,处理错误信息
  console.log(error.messages)
}

方式2:优化验证器类,彻底移除上下文依赖(推荐后续复用)

你可以直接修改验证器,把不需要的上下文依赖去掉,后续任意场景都可以直接调用:

// 修改后的CreateUserValidator.ts
import { schema, rules } from "@ioc:Adonis/Core/Validator";

export default class CreateUserValidator {
  static 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(),
  });

  static messages = {};
}

调用时不需要再处理上下文,直接使用即可:

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

const dataToValidate = {
  lat: "30.1234",
  lng: "120.5678",
  radius: 1000,
  distance: 500
}

try {
  const validated = await validator.validate({
    schema: CreateUserValidator.schema,
    data: dataToValidate,
    messages: CreateUserValidator.messages
  })
} catch (error) {
  console.log(error.messages)
}

内容的提问来源于stack exchange,提问作者Smit Gajera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:45:04