Prynik
@Prynik

Почему в production файлах не работает обработка fetch через await?

Есть пользовательский хук fetch запроса

import { useCallback, useState } from "react"

// STORE imports
import AuthStore from '../mobx/auth.store'

export const useHttp = () => {
    const [loading, setLoading] = useState(false)
    const [error, setError] = useState(null)

    const request = useCallback(async (url, method = 'GET', body = null, headers = {}) => {
        setLoading(true)
        try {
            const response = await fetch(url, {
                method,
                body,
                headers: {
                    Authorization: `Bearer ${AuthStore.token}`,
                    ...headers
                }
            })

            const data = await response.json() // при выполнении этой строки возникает ошибка

            if (!response.ok) {
                let message = 'При отправке запроса, что-то пошло не так'

                if (typeof data.errors === 'object') {
                    message = data.errors[0].msg
                } else {
                    message = data.message
                }

                throw new Error(message)
            }

            setLoading(false)

            return data
        } catch (e) {
            setLoading(false)
            setError(e.message)
            throw e
        }
    }, [])

    const clearError = () => setError(null)

    return {loading, error, request, clearError}
}


При разработке (npm run start) все работает, но стоит залить проду (npm run build) на любой хостинг/VPS/локалку, возникает ошибка. Ее отлавливает firefox developer edition.

Warning: An unhandled error was caught from submitForm() SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data


В чем может быть проблема?
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
От бэкенда возвращается не JSON. Посмотрите в мониторе сети, что именно приходит.
Или добавьте console.log(await response.text()); и посмотрите в консоли.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы