Обработка запросов маршрута между React и Express - PullRequest
1 голос
/ 07 января 2020

Я создаю приложение с функциями входа и регистрации с помощью 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 /: имя пользователя /: электронная почта /: пароль', ( req, res)

Это единственный способ, которым я могу получить данные формы в express, если я не включаю точки с запятой и вызываю эти значения с помощью req.params, я получаю «Ошибка 404 не найдена», потому что 3 значения пустые. Если я пытаюсь получить к ним доступ через req.body, они все еще кажутся пустыми. Я попытался JSON .stringify их, и я использую body-parser в * Приложение 1032 *. Мой вопрос: как я могу получить доступ к этим 3 значениям (имя пользователя, адрес электронной почты, пароль) с помощью req.body? Вот конкретный c способ, которым я должен отформатировать их, если я хочу получить доступ к этому маршруту из моего браузера, например http://localhost: 5000 / users? username & email & password

Как я могу отправить ответ обратно в приложение реагирования, чтобы сказать, например, что пользователь существует и пароль правильный? Я уже сделал запрос mysql, который проверяет это и обновляет переменную в express. Мне просто нужно отправить ответ, возможно, значение этой переменной, которая затем скажет, реагирует на go на страницу индекса. Однако res.send (переменная), похоже, не отправляет переменную для реакции, и форма входа остается неизменной после ее отправки.

1 Ответ

0 голосов
/ 07 января 2020

Для доступа к телу используйте method:"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"})
       })
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...