首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用类星体(Vue)的服务器端输入验证

使用类星体(Vue)的服务器端输入验证
EN

Stack Overflow用户
提问于 2020-08-13 19:07:49
回答 1查看 888关注 0票数 2

我正在寻找一个使用类星体框架进行服务器端输入验证的可重用解决方案。我使用q-input字段。有两个道具可以用于错误输出errorerror-message。我的服务器对验证错误的响应是使用此json的400响应。

代码语言:javascript
运行
复制
{
  errors: { username: ['Username is to long.', 'User not valid'] },
  title: 'One or more validation errors occurred.',
  status: 400,
  traceId: '80000005-0000-ff00-b63f-84710c7967bb'
}

我目前正在使用这个逻辑,但由于需要访问错误字段,所以我不能将它移动到混合器中。完整的示例可在这里获得,codesandbox.io

代码语言:javascript
运行
复制
<q-input
  v-model="username"
  filled
  label="Username *"
  :error-message="getErrorForField('username')"
  :error="isErrorForField('username')"
/>
代码语言:javascript
运行
复制
getErrorForField(field) {
  if (!this.errors) {
    return ''
  }
  const keys = Object.keys(this.errors)
  const key = keys.find(
    element => element.toLowerCase() === field.toLowerCase()
  )
  if (this.errors[key]) {
    return this.errors[key].join('\r\n')
  }
},
isErrorForField(field) {
  if (!this.errors) {
    return false
  }
  const keys = Object.keys(this.errors)
  const key = keys.find(
    element => element.toLowerCase() === field.toLowerCase()
  )
  if (this.errors[key]) {
    return true
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-13 17:59:29

我找到了一个新的vue3组合-api的解决方案。我现在有了一个可重用的逻辑。

MyComponent.vue

代码语言:javascript
运行
复制
<template>
<q-input
  v-model="username"
  filled
  label="Username *"
  :error-message="getErrorForField('username')"
  :error="isErrorForField('username')"
/>
</template>

<script>
import { validationHelper } from 'src/helper/validationHelper'

export default {
  name: 'MyComponent',
  setup () {
    const { showValidationError, setValidationErrors, getValidationErrors, hasValidationErrors } = validationHelper()
    return {
      showValidationError,
      setValidationErrors,
      getValidationErrors,
      hasValidationErrors
    }
  },
  methods: {
    async add () {
      try {
        //axios request
      } catch (error) {
        this.setValidationErrors(error.response.data.errors)
        this.showValidationError()
      }
    }
  }
}
</script>

validationHelper.js

代码语言:javascript
运行
复制
import { ref } from '@vue/composition-api'

export function validationHelper () {
  const errors = ref([])

  function getValidationErrorMessages (field) {
    if (!errors.value) {
      return []
    }
    const keys = Object.keys(errors.value)
    const key = keys.find(element => element.toLowerCase() === field.toLowerCase())
    if (errors.value[key]) {
      return errors.value[key]
    }
    return []
  }

  function getValidationErrors (field) {
    const errors = getValidationErrorMessages(field)
    if (errors.length !== 0) {
      return errors.join('\r\n')
    }
    return ''
  }

  function hasValidationErrors (field) {
    if (getValidationErrorMessages(field).length !== 0) {
      return true
    }
    return false
  }

  function setValidationErrors (payload) {
    errors.value = payload
  }

  function showValidationError () {
    this.$q.notify({
      type: 'negative',
      message: 'Validation failure',
      caption: 'please check the inputs'
    })
  }

  return {
    showValidationError,
    setValidationErrors,
    getValidationErrors,
    hasValidationErrors
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63401732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档