Я столкнулся с ошибкой при попытке сохранить URL-адрес загруженного изображения в FireStore. - PullRequest
0 голосов
/ 07 июня 2019

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

FirebaseError: Функция DocumentReference.set () вызвана с неверными данными. Неподдерживаемое значение поля: не определено (найдено в поле eventImgUrl)

const onSubmit = (e) => {
        e.preventDefault();

        if(eventImage) {

        const uploadImage = storage.ref(`EventImages/${values.eventName}`).put(eventImage);
        uploadImage.on('state_changed',
            (error) => {
                console.log(error);
            },
            () => {
                storage.ref('EventImages').child(values.eventName).getDownloadURL().then(url =>{
                    console.log(url);
                    setUrl(url);
                })

            }
        );
        }

        dbref.add({
            eventName: values.eventName,
            eventVenue: values.eventVenue,
            eventAddress: values.eventAddress,
            eventCategory: values.eventCategory,
            eventOrganizer: values.eventOrganizer,
            eventPhone: values.eventPhone,
            eventEmail: values.eventEmail,
            eventDetails: values.eventDetails,
            eventDate: selectedDate.toDateString(),
            eventTime: selectedDate.toLocaleTimeString(),
            eventImgUrl: eventImageUrl
        }).then((docRef) => {
            console.log("Document written with ID: ", docRef.id);
            setValues('');
            setImg('');
            setUrl('');
        }).catch((error) => {
            console.error("Error adding document: ", error);
        });

    }

Я хочу сохранить img url в моем созданном документе. Я использую хук для URL как: const [eventImageUrl, setUrl] = React.useState ();

Ответы [ 3 ]

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

ошибка от вашего const [eventImageUrl, setUrl] = React.useState() Измените eventImageUrl на url.кажется, это твоя проблема

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

Когда вы

console.log(url)

есть какое-либо значение?Теперь попробуйте console.log вашего

eventImageUrl 

, прежде чем добавить его в базу данных ... Что это говорит?Я верю, что это будет неопределенным.Вы также можете попытаться жестко закодировать URL-адрес

eventImgUrl: "www.test.test"

Работает ли он?

Если это так, вы знаете, что проблема в хуке EventImageUrl.Чтобы помочь вам больше, нам нужен полный код

ОБНОВЛЕНИЕ

Попробуйте это

const onSubmit = (e) => {
e.preventDefault();
if (eventImage) {
    const uploadImage = storage.ref(`EventImages/${values.eventName}`)
    uploadImage.put(eventImage).then(() => {
        storage.ref('EventImages').child(values.eventName).getDownloadURL().then(url => {
            dbref.add({
                eventName: values.eventName,
                eventVenue: values.eventVenue,
                eventAddress: values.eventAddress,
                eventCategory: values.eventCategory,
                eventOrganizer: values.eventOrganizer,
                eventPhone: values.eventPhone,
                eventEmail: values.eventEmail,
                eventDetails: values.eventDetails,
                eventDate: selectedDate.toDateString(),
                eventTime: selectedDate.toLocaleTimeString(),
                eventImgUrl: url
            }).then((docRef) => {
                console.log("Document written with ID: ", docRef.id);
                setValues('');
                setImg('');
                setUrl('');
            }).catch((error) => {
                console.error("Error adding document: ", error);
            });
        })
    })

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

В сообщении об ошибке сообщается, что eventImageUrl не определено. Это означает, что вы никогда не присваиваете ему значение. В приведенном здесь коде мы даже не видим, где он был объявлен.

Вам нужно будет отладить свой код и убедиться, что eventImageUrl содержит ожидаемое вами значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...