Как я могу управлять ошибками запроса mysql от экспресса в форме React? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь отправить пользователей на две разные страницы в зависимости от того, успешен ли SQL-запрос или нет на экспресс-бэкэнде. Но только путь успеха показывает, когда я использую этот код.

Ранее у меня не было оператора await, но возникла та же проблема. Я не уверен, принимает ли сторона реакции сообщение об ошибке в качестве ответа, поскольку оно все еще входит в консоль из бэкэнда.

Вот метод во внешнем интерфейсе, который вызывается при отправке формы:

        e.preventDefault();
        console.log(this.state);  
        const newPost = {
            pet_name : this.state.pet_name, 
            content : this.state.content, 
            content : this.state.content, 
            owner : 'testOwner', 
            email : 'test@gmail.com', 
            img_path : this.state.upload_image
        }; 
        //fetch instead of this to talk about in diss

        try {
        const postData = await axios.post('http://localhost:3306/reportpet', newPost)
        .then(res=>console.log(res.data));
        this.props.history.push('/postsubmitted')

        } catch(error) { 
            console.log("Catch = ", error.response); 
            this.props.history.push('/posterror')

    }```

The route on the backend is as follows: 
```router.post('/reportpet', function (req, res) {

    var pet_name = req.body.pet_name,
    content = req.body.content,
    date = req.body.date,
    owner = req.body.owner,
    email = req.body.email,
    img_path = req.body.img_path;  

    const query = "INSERT INTO `posts` (`post_id`, `pet_name`, `content`, `date`, `owner`, `email`, `img_path`) VALUES (?, ?, ?, UTC_TIMESTAMP(),?, ?, ?);"
    console.log(query);
    connection.query(query, [pet_name, pet_name, content, owner, email, img_path ], function(err, result) {
        (err)?res.send(err+'error was created'):res.json(result); 
        if (err) throw err; 
        console.log('rows inserted')
    })

})

module.exports = router

Когда данные не добавляются в базу данных, я ожидаю, что пользователь будет отправлен в компонент ошибки. Когда он будет успешным, я ожидаю, что компонент успеха будет отображаться.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Николай Примак ответил на это.У меня был ответ, посылая ошибку вместо того, чтобы выбросить ее, удалить ее и добавить ответ под меткой исправления.

Код в бэкэнде теперь такой:

const query = "INSERT INTO `posts` (`post_id`, `pet_name`, `content`, `date`, `owner`, `email`, `img_path`) VALUES (null, ?, ?, UTC_TIMESTAMP(),?, ?, ?);"
    console.log(query);
    connection.query(query, [pet_name, content, owner, email, img_path ], function(err, result) {
        // (err)?res.send(err+'error was created'):res.json(result); {removed code}
        if (err) throw err; 
        res.json(result); 
        console.log('rows inserted')
    })
    ```
0 голосов
/ 05 июня 2019

Попробуйте пропустить, используя .then () в ожидании. И убедитесь, что ваш сервер возвращает ответ с правильным кодом ошибки HTTP (4xx или 5xx), чтобы аксиос знал, что произошла ошибка.

try {
    const postData = await axios.post('http://localhost:3306/reportpet', newPost)

    console.log(postData);

    this.props.history.push('/postsubmitted')
} catch(error) { 
    console.log("Catch = ", error.response); 
    this.props.history.push('/posterror')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...