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​