Ошибка CORS во время выборки onComponentDidMount в ReactJS - PullRequest
1 голос
/ 08 мая 2020

я получаю пустую страницу в качестве вывода при получении данных api в reactjs.

Репо: https://github.com/te3t0/building-small-blog

я возможно, новичок в reactjs, я получаю пустую страницу, даже если данные извлекаются отлично. Было бы здорово, если бы кто-нибудь мог мне помочь там, где я делаю что-то не так. заранее большое спасибо.

endpoint_url: http://localhost: 8000 / api / blog_list

api-data:

[
    {
        "id": 1,
        "url": "http://localhost:8000/api/blog_detail/brown",
        "title": "brown",
        "slug": "brown",
        "image": "http://localhost:8000/media/blog/image_2.jpg",
        "description": "",
        "created_on": "2020-05-08T15:20:53Z",
        "status": true,
        "category": [
            1
        ]
    },
    {
        "id": 2,
        "url": "http://localhost:8000/api/blog_detail/black",
        "title": "black",
        "slug": "black",
        "image": "http://localhost:8000/media/blog/loc.png",
        "description": "",
        "created_on": "2020-05-08T17:14:31Z",
        "status": true,
        "category": [
            2
        ]
    }
]

. /src/Base.js

export default class App extends Component{

  state = {
    bloglist:[]
  };

  componentDidMount(){
    this.fetchData()
  }

  fetchData = async () => {
    try{
      const response = await fetch("http://localhost:8000/api/blog_list");
      const jsonResponse = await response.json()
      this.setState({bloglist:jsonResponse})
    }
    catch(error){
      console.log(error)
    }
  }

  render(){
    const {bloglist} = this.state
    if(!bloglist){
      return (
        <div>
          <h1>loading...</h1>
        </div>
      )
    }

    return (
      {
        bloglist.map(bloglist => (
          <h3 class="mb-2">
            <a href="single.html">{bloglist.title}</a>
          </h3>
          <p class="mb-4">{bloglist.description}</p>
          ))
      }
    )
  }
}

1 Ответ

2 голосов
/ 09 мая 2020

Поскольку это первый пост для вас - есть несколько вещей, которые go не очень хорошо помогли отладить проблему.

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

например,

GET http://localhost:8000/api/blog_list net::ERR_FAILED

'http://localhost:8000/api/blog_list' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled

Оттуда - включив удаленный репозиторий - я смог узнать больше через Как я могу включить CORS на Django REST Framework

Что привело на следующий ответ:

  1. pip install django-cors-headers

  2. добавить установленные приложения

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)
добавить промежуточное ПО
MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',  
    'django.middleware.common.CommonMiddleware',  
    ...
)

CORS_ORIGIN_ALLOW_ALL = True # If this is used then `CORS_ORIGIN_WHITELIST` will not have any effect
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = [
    'http://localhost:3000',
] # If this is used, then not need to use `CORS_ORIGIN_ALLOW_ALL = True`
CORS_ORIGIN_REGEX_WHITELIST = [
    'http://localhost:3000',
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...