提问者:小点点

处理React和Express之间的路由请求


我正在使用React和Express创建一个具有登录和注册功能的应用程序。我正在使用Formik处理表单数据并将其发布:

> const initialValues={{username:"", email:"", password:""}}
onSubmit ={ async (values, { setSubmitting }) => {
  const value = values.username+'/'+values.email+'/'+values.password;
  const res = await fetch(`http://localhost:5000/newuser/${value}`, {
      method: 'GET',
      mode: 'cors',
      headers: {
          'Content-Type': 'application/json',
          'Access-Control-Allow-Origin': '*'
      }}).then(response => response.json());
      console.log(res);
      values = initialValues;
    setSubmitting(false);

}

然后通过以下路径将其发送到express应用程序:

> app.get('/newuser/:username/:email/:password', (req, res) => {
const username = req.params.username;
const email = req.params.email;
const password = req.params.password;
let sql = `Insert into users (username, useremail, userpass) values ('${username}', '${email}', '${password}')`;
query = db.query(sql, (err, results) => {
    if(err){throw err;}
    res.send("New user added you can login now");
});

});

我能够将这些用户保存到数据库,但是我有以下2个关于这段代码的问题,我能够从各种不同的视频,教程,问题和文档中拼凑出来:

  1. 关于这一行:

app.get('/newuser/:用户名/: email/:密码',(req, res)

如果不包含分号并使用req调用这些值,这是将表单数据转换为express的唯一方法。参数,我得到一个“404未找到错误”,因为3个值为空。如果我尝试通过req访问它们。尸体看起来还是空的。我已经试过了。将它们字符串化,我将在express应用程序中使用body解析器。我的问题是如何使用req访问这3个值(用户名、电子邮件、密码)。身体例如,如果我想从我的浏览器访问此路线,是否有一种特定的格式化方法http://localhost:5000/users?username


共1个答案

匿名用户

要访问正文,请使用方法:POST而不是GET。

let response = await fetch(`http://localhost:5000/newUser`, {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(values),
    })

if (response.errors) {
   console.error(response.errors)
}

let responseJson = await response.json()

if (responseJson['message']) {
   console.log(responseJson['message'])
}

服务器端使用如下内容:

import cors from 'cors'

...

let app = express() 
    .use(cors())
    .post('/newUser', (req, res) => {
        let {username, email, password} = req.body
        ...
        // If all ok
        res.status(200).send({message: "User created"})

        // If there's an issue
        res.status(500).send({message: "oups"})
       })
    ...