Ошибка TypeError: undefined не является объектом (оценка '(0, t (r (d [3])). Default) (). ApiUrl' выпуск канала android проблема - PullRequest
0 голосов
/ 17 апреля 2020

У меня возникла эта проблема, когда я опубликовал sh мое собственное приложение реакции с флагом --release-channel dev или без него. Я настроил среду файла конфигурации. js, чтобы получить другую версию выпуска, например:

import Constants from "expo-constants";
import { Platform } from "react-native";

const localhost = Platform.OS === "ios" ? "localhost:8080" : "10.0.2.2:8080";

const ENV = {
  localhost: {
    //apiUrl: localhost,
    apiUrl: "http:xxxx",
  },
  dev: {
    apiUrl: "http:xxxx",
  },
  staging: {
    apiUrl: "http:xxxx",
    // Add other keys you want here
  },
  prod: {
    apiUrl: "http:xxxx",
    // Add other keys you want here
  },
};

const getEnvVars = (env = Constants.manifest.releaseChannel) => {
  // What is __DEV__ ?
  // This variable is set to true when react-native is running in Dev mode.
  // __DEV__ is true when run locally, but false when published.
  if (__DEV__ || env === undefined || env === null || env === "") {
    return ENV.localhost;
  } else if (env.indexOf("dev") !== -1) {
    return ENV.dev;
  } else if (env.indexOf("staging") !== -1) {
    return ENV.staging;
  } else if (env.indexOf("prod") !== -1) {
    return ENV.prod;
  }
};

export default getEnvVars;

Я перехватываю конфигурацию с созданием нового экземпляра ax ios, например:

import axios from "axios";
import { getKey } from "./deviceStorage";

import getEnvVars from "../../environment";
const { apiUrl } = getEnvVars();

const instance = axios.create({
  // .. where we make our configurations
  baseURL: apiUrl,
});

instance.interceptors.request.use((config) => {
  const token = getKey("id_token");
  token.then((value) => {
    config.headers.Authorization = value ? `Bearer ${value}` : "";
  });
  return config;
});

export default instance;

когда я эмулирую на своем устройстве, все работает нормально, но когда я выставляю sh и сканирую QR-код на моем устройстве, приложение делает sh после экрана spla sh, и я получаю эту ошибку:

enter image description here

Итак, если я хорошо понимаю, Constants.manifest.releaseChannel не определен, есть идеи, почему это произошло? я что-то пропускаю при импорте?

Когда я помещаю URL-адрес Api прямо на свои перехватчики ios, все работает нормально. импорт топор ios из "топор ios"; import {getKey} from "./deviceStorage";

//import getEnvVars from "../../environment";
//const { apiUrl } = getEnvVars();

const instance = axios.create({
  // .. where we make our configurations
  baseURL: "http://xxxx",
});

instance.interceptors.request.use((config) => {
  const token = getKey("id_token");
  token.then((value) => {
    config.headers.Authorization = value ? `Bearer ${value}` : "";
  });
  return config;
});

export default instance;

export const ApiUrls = {
  authPatient: "/xxx",
  authPractician: "/xxx",
};

Спасибо за помощь.

1 Ответ

0 голосов
/ 22 апреля 2020

Я нахожу здесь свою проблему и, возможно, помогу кому-нибудь в будущем, поэтому: я удаляю параметр env на getEnvVars, и я объявил внутри функции, и все работает нормально:

const getEnvVars = () => {
  const env = Constants.manifest.releaseChannel;
  if (!__DEV__ && env) {
    switch (env) {
      case env.indexOf("dev") !== -1:
        return ENV.dev;
      case env.indexOf("staging") !== -1:
        return ENV.staging;
      case env.indexOf("prod") !== -1:
        return ENV.prod;
      default:
        return ENV.localhost;
    }
  }
  return ENV.localhost;
};
...