gpt4 book ai didi

javascript - 如何使用 Formik 和 Yup 进行服务器端验证?

转载 作者:行者123 更新时间:2023-12-03 07:10:51 25 4
gpt4 key购买 nike

我正在尝试验证注册表单上的电子邮件字段以检查它是否已经存在。为此,我正在检查返回 true 和 false 的服务器上正在运行的 GET 请求。

这是我对该字段的验证架构:

validationSchema={
yup.object().shape({
registrationEmail: yup.string().email('Invalid email').test('Unique Email','Email already in use', async (value) => {axios.get('http://localhost:5000/users/register', value).catch(err => console.log(err)) })
})
}

问题似乎是值字段为空白。如何将 Formik 字段中的值传递给我的函数?

编辑:
管理使用以下方法发送值(value)
registrationEmail: yup.string().email('Invalid email').test('Unique Email','Email already in use', function(value){return new Promise((resolve, reject) => {axios.get('http://localhost:5000/users/register', value)})})

我仍然无法返回响应这是路线的样子
router.get('/register', (req, res) => {
User.findOne({email: req.body.email}).then(user => {
if(user){
return true
}else{
return false
}
})
})

最佳答案

我解决了我的验证问题,我执行了以下操作:

 registrationEmail: yup.string().email('Invalid email')
.test('Unique Email','Email already in use',
function(value){return new Promise((resolve, reject) => {
axios.post('http://localhost:5000/users/register/validEmail', {'email': value})
.then(res => {if(res.data.msg === 'Username already been taken'){resolve(false)} resolve(true)})
})}
)

对于路线:
router.post('/register/validEmail', (req, res) => {
console.log('Request: ', req.body)
User.findOne({email: req.body.email}).then(user => {
if(user){
console.log({ msg:"Username already been taken" })
return res.json({ msg:"Username already been taken" })
}

console.log({ msg: "Username available." })
return res.json({ msg: "Username available." })

}).catch((err)=>{
console.error(err);
res.status(400).json('Error: ' + err)
})
})

原来我必须使用 POST 请求,否则请求的正文将为空。

关于javascript - 如何使用 Formik 和 Yup 进行服务器端验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60839218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com