javascript - 如何使用 Redux-Form 进行客户端和服务器端验证
问题描述
我有一个奇怪的要求。我需要在客户端和服务器端做一个 redux-form 验证。我能够在客户端执行此操作,但不确定如何为客户端和服务器端执行此操作。检查了 redux-form 文档,它是在客户端或服务器上完成的,但不是同时在两者上完成。
这是代码
import React from 'react'
import { Field, reduxForm } from 'redux-form'
const validate = values => {
const errors = {}
if (!values.username) {
errors.username = 'Required'
} else if (values.username.length > 15) {
errors.username = 'Must be 15 characters or less'
}
if (!values.email) {
errors.email = 'Required'
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {
errors.email = 'Invalid email address'
}
if (!values.age) {
errors.age = 'Required'
} else if (isNaN(Number(values.age))) {
errors.age = 'Must be a number'
} else if (Number(values.age) < 18) {
errors.age = 'Sorry, you must be at least 18 years old'
}
return errors
}
const renderField = ({
input,
label,
type,
meta: { touched, error, warning }
}) => (
<div>
<label>{label}</label>
<div>
<input {...input} placeholder={label} type={type} />
{touched &&
((error && <span>{error}</span>) ||
(warning && <span>{warning}</span>))}
</div>
</div>
)
const SyncValidationForm = props => {
const { handleSubmit, pristine, reset, submitting } = props
return (
<form onSubmit={handleSubmit}>
<Field
name="username"
type="text"
component={renderField}
label="Username"
/>
<Field name="email" type="email" component={renderField} label="Email" />
<Field name="age" type="number" component={renderField} label="Age" />
<div>
<button type="submit" disabled={submitting}>
Submit
</button>
<button type="button" disabled={pristine || submitting} onClick={reset}>
Clear Values
</button>
</div>
</form>
)
}
export default reduxForm({
form: 'syncValidation',
validate
})(SyncValidationForm)
现在 onSubmit 我必须执行 API 请求并显示来自服务器的每个字段的错误。谁能解释我如何在保持客户端验证正常工作的同时添加服务器端验证?
提前致谢。
解决方案
那么,您需要为此编写服务器端代码。这取决于您要使用哪种语言,但我想node.js
实现这一点很好。因此,为了验证服务器上的数据,您应该创建一个 nodejs 服务器,并传递您的数据(已经在客户端验证过的数据)然后在node.js
服务器中再次验证您想要的数据。所以总而言之,你应该从node.js
简单的开始,因为 react/node.js 几乎相同。希望对你有帮助
推荐阅读
- r - 使用 facet_wrap 显示多个直方图
- javascript - 在数组元素之前添加文本
- hadoop - 如何检查 Oozie 工作流程中的 EL 语法错误?
- r - 基于 Copula 的条件概率
- javascript - 将一个集合中的字符串引用到另一个集合(猫鼬模式)
- python - Solving non-linear set of symbolic equations with SymPy (Python)
- mysql - Mysql查询多个inner join和left join
- string - 您可以使用什么 VBA 字符串对象来修改段落
- python - 此生成器函数的意外行为
- oauth-2.0 - MS Graph 两足 Oauth 2.0