Axios (в React-native) не вызывает сервер в localhost
Я создаю очень простой api и реагирую-родное приложение. Сервер работает хорошо (протестирован с PostMan), но приложение не вызывает сервер. Он блокирует, когда axios должен отправить запрос post (см. ниже).
Я в отчаянии : - (потерять слишком много времени в нем. Пожалуйста, если вы можете мне помочь...
вот мой код страницы входа в систему. Он отправляет создателя действия (работает с redux), давая электронную почту и пароль:
...
const LogIn = React.createClass({
submitLogin() {
// log in the server
if (this.props.email !== '' && this.props.psw !== '') {
if (this.props.valid === true) {
this.props.dispatch(logIn(this.props.email, this.props.psw));
} else {
this.props.dispatch(errorTyping());
}
}
},
...
электронная почта и пароль weel извлекается и отправляется создателю действия:
import axios from 'axios';
import { SIGNIN_URL, SIGNUP_URL } from '../api';
// import { addAlert } from './alerts';
exports.logIn = (email, password) => {
return function (dispatch) {
console.log(email);
console.log(password);
console.log(SIGNIN_URL);
return axios.post(SIGNIN_URL, { email, password })
.then(
(response) => {
console.log(response);
const { token, userId } = response.data;
dispatch(authUser(userId));
}
)
.catch(
(error) => {
console.log('Could not log in');
}
);
};
};
const authUser = (userId) => {
return {
type: 'AUTH_USER',
userId
};
};
...
три консоли.log () перед axios показать данные в правильном направлении. SIGNIN_URL точно такой же, как я использую в postman. ...но Аксиос не звонит.
просто чтобы дать все карты, это мой магазин:
import thunk from 'redux-thunk';
import { createStore, compose, applyMiddleware } from 'redux';
import { AsyncStorage } from 'react-native';
import { persistStore, autoRehydrate } from 'redux-persist';
import reducer from '../reducer';
const defaultState = {};
exports.configureStore = (initialState = defaultState) => {
const store = createStore(reducer, initialState, compose(
applyMiddleware(thunk),
autoRehydrate()
));
persistStore(store, { storage: AsyncStorage });
return store;
};
в отладчике нет сообщения об ошибке (но тот, который задан вызовом axios ("не удалось войти")
Я на windows 10, с:
"axios": "^0.15.3",
"react": "15.4.2",
"react-native": "0.38.0",
"redux": "^3.6.0"
вызов не выполняется, даже если Я готовлю простой вызов GET, и сервер должен вернуть простое сообщение (протестировано с почтальоном и браузером):
exports.test = () => {
return function () {
return axios.get('https://localhost:3000/v1/test')
.then(
(response) => {
console.log(response);
}
)
.catch(
(error) => {
console.log('error');
}
);
};
};
наконец, я попытался также изменить вызов, добавив заголовок следующим образом, потому что api закодирован для принятия json:
const head = {
headers: { 'Content-Type': 'application/json' }
};
exports.test = () => {
return function () {
return axios.get('https://api.github.com/users/massimopibiri', head)
.then(
(response) => {
console.log(response);
}
)
.catch(
(error) => {
console.log('error');
}
);
};
};
но даже это не сработало. надеюсь, кто-то может мне помочь. Других подобных проблем не было.
2 ответов
решение пришло из другого источника, но я размещаю его здесь, чтобы помочь другим, ищущим ту же проблему. В основном я использовал Android AVD (эмулятор) для создания приложения. Но эмулятор на самом деле является другой машиной, и поэтому он не может вызвать localhost.
чтобы решить проблему, мне пришлось отправить запрос следующим образом:
https://10.0.2.2:3000/v1/test
вместо:
https://localhost:3000/v1/test
Я нашел другое решение для axios.получить не работает в react native проблема:
проблема: - объект не виден и ошибка: необработанное обещание. Ошибка сети Решение:-- используйте команду ниже:
=>>> npm install -g --save axios
вместо npm install --save axios т. е. использовать-g.
а также проверьте, имеет ли ваш эмулятор подключение к интернету.
Если ваш эмулятор не имеет подключения к интернету и показывает ошибку, такую как: DNS зонд закончил плохую конфигурацию., затем Остановите эмулятор Android STUDIO и запустите эти две команды в терминале
1.>> C:\Users\Admin\AppData\Local\Android\sdk\emulator\emulator.exe -list-avds
Мой Вывод:
- Pixel_XL_API_27
после этого шага вы получите имя avds.
пример:- Pixel_XL_API_27
теперь выполните команду ниже: -
2.>> C:\Users\Admin\AppData\Local\Android\sdk\emulator\emulator.exe -avd Pixel_XL_API_27 -dns-server 8.8.8.8