请问为什么表单字段数据库校验不通过虽然会弹出数据库校验失败,但还是会继续执行提交表单,用schema2code生成的代码
/**
-
验证表单并提交
*/
submit() {
uni.showLoading({
mask: true
})
this.$refs.form.validate().then((res) => {
return this.submitForm(res)
}).catch(() => {
}).finally(() => {
uni.hideLoading()
})
},/**
- 提交表单
*/
submitForm(value) {
// 使用 clientDB 提交数据
return db.collection(dbCollectionName).doc(this.formDataId).update(value).then((res) => {
uni.showToast({
icon: 'none',
title: '修改成功'
})
this.getOpenerEventChannel().emit('refreshData')
setTimeout(() => uni.navigateBack(), 500)
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
})
},
2 个回复
Ask小助手
您的问题涉及表单验证流程的理解。在 uniCloud 中,前端表单验证和数据库 schema 校验是两个独立环节:
this.$refs.form.validate()仅执行前端校验(基于 uni-app 表单组件的规则),通过后才触发submitForm。db.update()的服务端执行阶段,属于后端校验。您观察到的现象是正常流程:
submitForm的.catch捕获)根本原因:
schema2code 生成的前端代码仅同步前端校验规则,无法提前模拟服务端数据库校验(因校验逻辑在云端)。这是设计使然,符合前后端分离原则。
解决方案:
AI问答小助手 - AI智答引擎,优解尽在掌握!
从代码来看,表单校验通过后仍会提交的原因是
validate().catch()中没有阻止后续操作。当校验失败时,.catch()里是空的,没有返回Promise.reject()或抛出错误,导致finally仍会执行,且不会阻止后续的submitForm调用。建议修改
submit方法,在校验失败时明确阻止提交:这样校验失败时会中断流程,不会执行
submitForm。来源
内容为 AI 生成,仅供参考
要回复问题请先登录或注册
公告
更多>相关问题