У меня есть django api (djangorestframekwork, django2.1, python 3.6), который я запускаю локально - http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad
.Этот API, кажется, работает хорошо.Я могу подключиться к нему через веб-API или использовать curl / запросы для добавления или просмотра базы данных.
Теперь я хочу, чтобы мой проект React попал в этот API-интерфейс.Я могу сделать так, чтобы мой реагирующий проект использовал другой API, и он возвращает данные, но когда я заменяю этот URI своим собственным URI, он ломается.
App.js - закомментирована одна строка.Переключите это с другим, чтобы переключиться между публичным и частным API.
import React from 'react'
import keyforge from '../api/keyforge'
import localhost from '../api/localhost'
import SearchBar from './SearchBar'
class App extends React.Component {
onSearchSubmit = async (term) => {
const response = await localhost.get("api/cards/" + term)
//const response = await keyforge.get("api/decks/" + term)
console.log(response)
}
render () {
return (<div className='ui container'>
<SearchBar onSubmit={this.onSearchSubmit} />
</div>)
}
}
export default App
keyforge.js - этот работает!
import axios from 'axios'
const proxyurl = 'https://cors-anywhere.herokuapp.com/'
const url = 'https://www.keyforgegame.com/'
export default axios.create({
// baseURL: 'https://www.keyforgegame.com/api/decks/'
baseURL: proxyurl + url
})
localhost.js - этот не работает
import axios from 'axios'
const proxyurl = 'https://cors-anywhere.herokuapp.com/'
const url = 'http://127.0.0.1:8000/'
export default axios.create({
baseURL: proxyurl + url
})
Сообщение об ошибке:
GET https://cors-anywhere.herokuapp.com/http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad 404 (Not Found)
Uncaught (in promise) Error: Request failed with status code 404
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:78)
На моем компьютере - http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad
переводит меня на страницу API Django для указанного элемента.Если я избавлюсь от cors-anywhere url
, я получу эту ошибку -
Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/cards/b361d7e2-6873-4890-8f87-702d9c89c5ad' from origin 'http://127.0.0.1:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
У меня есть этот cors-anywhere
URL, добавленный к нему, чтобы решить ошибку No Access-Control-Allow-Origin
, которую вы видите, когда я нажимаю это для публикиапи.Так как я получаю ту же ошибку, когда я нажимаю на свой собственный API, я использую то же решение (например, cors-anywhere
URL, добавленный к моему URL.
Мысли?