В настоящее время я создаю простое приложение в React Native 0.62.2 для Android. У меня были некоторые проблемы с axios 0.19.2
(или даже fetch
API) при попытке загрузить изображения в мой API (который написан на node.js
/ express
). Запрос POST
формулируется следующим образом:
// UserService.js
export const postNewUser = async (newUser) => {
try {
const photo = {
uri: newUser.avatar.uri,
type: 'image/jpg',
name: newUser.avatar.fileName,
};
const formData = new FormData();
Object.keys(newUser).forEach(key => formData.append(key, newUser[key]));
formData.append('avatar', photo);
const response = await api.post('/users', formData);
return response.data;
} catch (err) {
console.log('TRACE error posting user: ', err);
return;
}
}
Здесь свойство newUser.avatar.uri
задается с помощью библиотеки средства выбора изображений, а именно @react-native-image-picker 1.6.1
. Это дает мне NetworkError
всякий раз, когда я добавляю переменную photo
в FormData
. Установка URI вручную с произвольным изображением из Интернета приводит к той же ошибке. Отлаживая его из браузера, он выводит какую-то трассировку стека, такую как эта:
TRACE error posting user: Error: Network Error
at createError (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\axios\lib\core\createError.js:16)
at EventTarget.handleError (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\axios\lib\adapters\xhr.js:83)
at EventTarget.dispatchEvent (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\event-target-shim\dist\event-target-shim.js:818)
at EventTarget.setReadyState (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\Network\XMLHttpRequest.js:575)
at EventTarget.__didCompleteResponse (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\Network\XMLHttpRequest.js:389)
at C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\Network\XMLHttpRequest.js:502
at RCTDeviceEventEmitter.emit (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\vendor\emitter\EventEmitter.js:189)
at MessageQueue.__callFunction (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:425)
at C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:112
at MessageQueue.__guard (C:\Users\Dell\Documents\Projetos\SmartestVet\node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:373)
Если я, например, закомментирую строку formData.append('avatar', photo);
, она работает отлично, т.е. мой API получает запросить соответственно. Так что я думаю, что это не может быть связано с CORS. Кроме того, другие запросы, такие как GET и даже другие POST, работают просто отлично.
Я знаю, что здесь, в SO, а также в GitHub есть куча других связанных постов, некоторые из которых касаются точно такой же проблемы. Но ни одно из найденных мной решений не сработало для меня.
Если кто-то захочет проверить, как реализованы маршруты в моем API, просто поразите меня, и я приведу здесь код.
Заранее спасибо за любую помощь, которую вы можете мне дать!