我正在try 使用SQL和Express构建CRUD,现在我正在try 在用户名已在数据库中注册时重定向用户,但当错误409发生时,即使我使用了try/catch
块来处理错误,控制台也会显示:"Failed to load resource: the server responded with a status of 409 (Conflict)"
并且带有导航至登录的行不会执行.
这是react 组件:
import React, { useState } from 'react'
import { Link, useNavigate } from 'react-router-dom'
import axios from 'axios'
const Register = () => {
const [inputs, setInputs] = useState({
username: '',
email: '',
password: ''
});
const [err, setError] = useState(null);
const navigate = useNavigate();
const handleChange = e => {
setInputs(prev=>({...prev, [e.target.name]: e.target.value}))
}
const handleClick = async (e) => {
e.preventDefault()
try{
await axios.post('http://localhost:8800/api/auth/register', inputs);
setTimeout(()=>{
navigate("/login")
}, "1500");
} catch(err){
setError(err.response.data)
}
}
return (
<div className="auth">
<h1>Register</h1>
<form>
<input required type="text" name='username' placeholder='Username' onChange={handleChange}/>
<input required type="email" name='email' placeholder='Email' onChange={handleChange}/>
<input required type="password" name='password' placeholder='Password' onChange={handleChange}/>
<button onClick={handleClick}>Sign up</button>
{err && <p>{err}</p>}
<span>Already have an account? <br/><Link to='/login'>login!</Link></span>
</form>
</div>
)
}
export default Register
这是express 控制器:
import { db } from '../db.js'
import bcrypt from 'bcryptjs'
export const register = (req, res) => {
//check existing user
const q = "SELECT * FROM blog.users WHERE email = ? OR username = ?;";
db.query(q, [req.body.email, req.body.username], (err, data) => {
if (err) return res.json(err)
if(data.length) return res.status(409).json('user already exists!')
// hash the password and create a user
bcrypt.genSalt(10, (err, salt)=>{
if(err){
console.log(err)
return res.status(500).json('error saving data');
}
bcrypt.hash(req.body.password, salt, (err, hash) => {
if(err){
console.log(err)
return res.status(500).json('error saving data');
}
const password = hash;
const q = "INSERT INTO blog.users(`username`, `email`, `password`) VALUES (?)";
const values = [req.body.username, req.body.email, password]
db.query(q, [values], (err, data) => {
if(err){
console.log(err)
return res.status(500).json('error saving data');
}
return res.status(200).json('User has been created');
})
})
})
})
}
export const login = (req, res) => {
}
export const logout = (req, res) => {
}
我try 了一切,所以如果有人能帮忙,我会很感激.