在我的React应用中,将代理服务器连接到我的Express服务器没有工作。

9 浏览
0 Comments

在我的React应用中,将代理服务器连接到我的Express服务器没有工作。

我在同一台本地机器上运行React应用程序的端口是3000,Express服务器的端口是4000。

在我的React应用程序中,我使用fetch API将我的注册表单数据发送到Express服务器的'/register'路由-

const response = await fetch('/register' , {
        method: 'POST',
        headers : {
            "Content-Type" : "application/json"
        },
        body: JSON.stringify({
            name: username,
            email : useremail,
            phone : userphone,
            work : userwork,
            password: userpassword,
            cpassword : usercpassword
        })
    });
    const data = await response.json();
    if(data.status === 422 || !data){
        window.alert("无效的注册");
        console.log("无效的注册");
    }else{
        window.alert("注册成功");
        console.log("注册成功");
       //使用useHistory hook
        history.push('/login');
    }
}

而在我的Express服务器中,我在'/register'路由上进行了POST方法,并将表单数据存储在我的数据库中-

router.post('/register' , (req,res)=>{
    const {name, email, phone, work, password, cpassword} = req.body;
    //我们检查输入是否为空
    if(!name || !email || !phone || !work || !password || !cpassword){
        return res.status(422).send('请填写所有字段');
    }
    //通过检查电子邮件来观察用户是否已经注册
    User.findOne({email : email})
            .then((userExist) =>{
                    if(userExist){
                        return res.status(422).send('电子邮件已存在');
                    }else if(password !== cpassword){
                        return res.status(422).send('密码不匹配');
                    }
                    //如果电子邮件不存在,那么用户是新用户,我们将其数据存储在数据库中
                    const user = new User({
                        name : name,
                        email : email,
                        phone : phone,
                        work : work,
                        password : password,
                        cpassword : cpassword,
            });
                //保存数据到数据库
            user.save()
            .then(()=>{
                res.status(201).send('用户注册成功')
            })
            .catch((err)=>{
                res.status(500).send(err);
            })
    }).catch((err)=>{
        console.log(err);
    })
})

在我的React应用程序的package.json文件中,我将代理添加到localhost:4000(Express服务器定义为端口4000)-

{

"name": "frontend",

"version": "0.1.0",

"private": true,

"proxy" : "http://localhost:4000",

"dependencies": {

"@testing-library/jest-dom": "^5.11.10",

"@testing-library/react": "^11.2.6",

"@testing-library/user-event": "^12.8.3",

"bootstrap": "^5.0.0-beta3",

"react": "^17.0.2",

"react-dom": "^17.0.2",

"react-router-dom": "^5.2.0",

"react-scripts": "4.0.3",

"web-vitals": "^1.1.1"

},

"scripts": {

"start": "react-scripts start",

"build": "react-scripts build",

"test": "react-scripts test",

"eject": "react-scripts eject"

},

"eslintConfig": {

"extends": [

"react-app",

"react-app/jest"

]

},

"browserslist": {

"production": [

">0.2%",

"not dead",

"not op_mini all"

],

"development": [

"last 1 chrome version",

"last 1 firefox version",

"last 1 safari version"

]

}

}

在我的Firefox控制台中,我遇到了以下错误-

enter image description here

enter image description here

enter image description here

在浏览器的网络选项卡下,我得到了这个-

enter image description here

我遇到了422状态错误。我已经尝试解决这个问题了5个小时了,但是阅读了很多解决方案和文章后,我无法解决这个问题。我还检查了stackoverflow上的类似问题,但是它们的解决方案没有起作用。基本上,我正在尝试将我的React应用程序的注册表单数据从React应用程序发送到Express服务器,通过在package.json文件(React应用程序)中定义代理,但是我不知道为什么React仍然认为它自己的端口是3000,而不是服务器端口4000。请帮助我解决这个问题。非常感谢。

0