Ax ios - [Отклонение необработанного обещания: ошибка: запрос не выполнен с кодом состояния 404] - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь подключиться к API yelp, используя ax ios в приложении React Native, но я получаю вышеупомянутую ошибку: Вот полная версия:

[Unhandled promise rejection: Error: Request failed with status code 404]
- node_modules\axios\lib\core\createError.js:15:17 in createError
- node_modules\axios\lib\core\settle.js:16:9 in settle
- node_modules\axios\lib\adapters\xhr.js:52:6 in handleLoad
- node_modules\event-target-shim\dist\event-target-shim.js:818:39 in EventTarget.prototype.dispatchEvent
- node_modules\react-native\Libraries\Network\XMLHttpRequest.js:566:23 in setReadyState
- node_modules\react-native\Libraries\Network\XMLHttpRequest.js:388:25 in __didCompleteResponse
- node_modules\react-native\Libraries\vendor\emitter\EventEmitter.js:190:12 in emit
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:436:47 in __callFunction
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:111:26 in __guard$argument_0
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:384:10 in __guard
- node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:110:17 in __guard$argument_0
* [native code]:null in callFunctionReturnFlushedQueue

I ' m создание экземпляра ax ios в yelp. js file:


export default axios.create({
  baseURL: "https://api.yelp.com/v3/businesses/search",
  headers: {
    Authorization:
      "Bearer uBsNGAyIv1M66CWgKUxdIITOmc7Z9oYzngUVVlVgUCaqFx-mARcKkw24hm6lecWq2jNAgU2s045rASW4o-_mTFCRcDZ0Z8732gd-hjRbayRf0u2NUHsZK6O5PCVZXnYx"
  }
});

Я уже убедился, что ключ API, добавленный в Авторизацию, правильный.

Я попытка вызвать / отобразить yelp api (используя запрос GET) в отдельном файле SearchScreen. js:

import React, { useState } from "react";
import { View, Text, StyleSheet } from "react-native";
import SearchBar from "../components/SearchBar";
import yelp from "../api/yelp";

const SearchScreen = () => {
  const [term, setTerm] = useState("");
  const [results, setResults] = useState([]);

  const searchApi = async () => {
    const response = await yelp.get("/search", {
      params: {
        term,
        limit: 50,
        location: "karachi"
      }
    });
    setResults(response.data.businesses);
  };
  return (
    <View>
      <SearchBar
        term={term}
        onTermChange={newTerm => setTerm(newTerm)}
        onTermSubmit={() => searchApi()}
      />
      <Text>Search Screen</Text>
      <Text>We have found {results.length} results.</Text>
    </View>
  );
};

const styles = StyleSheet.create({});

export default SearchScreen;

В чем здесь проблема? Всякий раз, когда я пытаюсь начать поиск с помощью термина на экране, это появляется как предупреждение, и я не могу вернуть никаких результатов.

Любая помощь будет оценена!

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

Вы отправляете неверный URL из-за этой ошибки 404.

В вашем экземпляре Ax ios вы устанавливаете базовый путь как

https://api.yelp.com/v3/businesses/search

Когда вы вызывая этот экземпляр, вы добавляете свой базовый путь с "/search", как показано ниже,

await yelp.get("/search", {params: {term, limit: 50, location: "karachi"}})

Теперь ваш URL выглядит как

https://api.yelp.com/v3/businesses/search/search?....

Так что удалите /search из Ax ios экземпляр.

Надеюсь, это поможет вам. Не стесняйтесь сомнений.

1 голос
/ 29 февраля 2020

Одна вещь - твоя ошибка. Он говорит вам, что вы должны поймать ваше потенциальное отклонение обещания.

const searchApi = async () => {
  try {
    const {data} = await yelp.get("/search", {params: {term, limit: 50, location: "karachi"}})
    setResults(data.business)
  } 
  catch (err) {
    console.warn(err)
    setResults([]);
  }
};

Это предотвратит остановку вашей программы. Вы все еще должны выяснить, почему вы получаете свой код 404.

...