React Native: ошибка Ajax с RxJS при простом пост-запросе - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь выполнить простой почтовый запрос в React Native с помощью модуля, который я также использую для своего веб-сайта.

У меня есть файл api.ts, в котором определено следующее:

import { ajax } from 'rxjs/observable/dom/ajax';
import { AjaxRequest } from 'rxjs/observable/dom/AjaxObservable';

 const ApiClient = {

  loginUser: (email: string, password: string) => {
    let requestBody = {email, password};
    let url = `${dotenv.REACT_APP_API_URL}/api/users/login`;
    return createRequestOptions(url, HttpOptions.POST, requestBody);
  }
 }

Метод параметров запроса выглядит следующим образом:

const createRequestOptions = (url: string, method: string, requestBody?: object) => {

    let requestOptions: AjaxRequest = {
      method: method,
      url: url,
      crossDomain: true,
      responseType: 'json',
      headers: {
        'Content-Type': 'application/json',
      }
    };
    if ((method === HttpOptions.POST || method === HttpOptions.PUT) && requestBody) {
      requestOptions.body = requestBody;
    }

    console.log(requestOptions);

    return ajax(requestOptions);
};

Выходные данные requestOptionsвыглядит следующим образом:

Object {
  "body": Object {
    "email": "myemail@gmail.com",
    "password": "mypassword",
  },
  "crossDomain": true,
  "headers": Object {
    "Content-Type": "application/json",
  },
  "method": "POST",
  "responseType": "json",
  "url": "http://localhost:3001/api/users/login",
}

Наконец, в моем эпосе у меня есть следующее:

const authLoginEpic: Epic = (action$, store) =>
  action$.pipe(
    ofType(ActionTypes.AUTH_LOGIN_REQUEST),
    mergeMap((action: AuthLoginRequest) =>
      ApiClient.loginUser(action.payload.username, action.payload.password).pipe(
        map((res: any) => {
          return AuthLoginReceive.create({response: res.response, email: action.payload.username});
        }),
        catchError((err) => {
          console.log(JSON.stringify(err));

По какой-то причине срабатывает catchError, и я понятия не имею, почему это может быть.Вывод журнала:

{"message":"ajax error","name":"AjaxError","xhr":{"UNSENT":0,"OPENED":1,"HEADERS_RECEIVED":2,"LOADING":3,"DONE":4,"readyState":4,"status":0,"timeout":0,"withCredentials":false,"upload":{},"_aborted":false,"_hasError":true,"_method":"POST","_response":"","_url":"http://localhost:3001/api/users/login","_timedOut":false,"_trackingName":"unknown","_incrementalEvents":false,"_requestId":null,"_cachedResponse":null,"_headers":{"content-type":"application/json"},"_responseType":"json","_sent":true,"_lowerCaseResponseHeaders":{},"_subscriptions":[]},"request":{"async":true,"crossDomain":true,"withCredentials":false,"headers":{"Content-Type":"application/json"},"method":"POST","responseType":"json","timeout":0,"url":"http://localhost:3001/api/users/login","body":"{\"email\":\"mymail@gmail.com\",\"password\":\"mypassword\"}"},"status":0,"responseType":"json","response":null}

Ошибка Ajax не очень наглядна.Кто-нибудь, что я могу делать не так?

1 Ответ

0 голосов
/ 12 мая 2019

Похоже, что это произошло из-за простого факта, что адрес API был установлен на localhost или 127.0.0.1

Убедитесь, что вы установили IP-адрес вашей локальной сети!

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