Как исправить ошибку CORS в моем запросе axios в приложении nextjs

Итак, я получаю эту ошибку при попытке сделать вызов axios для моего API на другом локальном хосте. Как я могу это исправить. Я использую Nextjs, ts и axios.

Вот функция (она плохо написана, просто для тестирования пока):

  const GetPartners = (e: { preventDefault: () => void; }) => {
      e.preventDefault();
      let token: string =
        "//This is normally correct just changed for question";
      axios
        .get(
          "http://localhost:7071/api/Partners",
          {
            headers: {
              Authorization: "Bearer " + token,
            },
          }
        )
        .then(res => console.info(res.data));
    } 
      return (
      <div className = {styles.container}>
        <button onClick = {GetPartners}>Get Partners</button>
      </div>
    );
  };
  
  export default Home;
  

и ошибка:

Access to XMLHttpRequest at 'http://localhost:7071/api/Partners' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
172
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

У вас есть доступ к http://localhost:7071 ? если это так, для этого приложения необходимо установить либо разрешать все подстановочные знаки localhost*, либо Access-Control-Allow-Origin: http://localhost:3031 в заголовке.

Это не имеет ничего общего с вашим запросом, но с ответом хоста, разрешающим ваш запрос.

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

Подробнее ознакомиться с темой можно здесь

A CORS preflight request is a CORS request that checks to see if the CORS protocol is understood and a server is aware using specific methods and headers.

Итак, в вашем случае, когда вы делаете запрос от localhost:3000 к localhost:7071, источник отличается, поэтому выполняется предварительный запрос.

Этот запрос завершается с ошибкой, потому что вы, возможно, не разрешили принимать запросы из разных источников на сервере localhost:7071, или мы можем сказать, что вы не включили CORS на этом сервере.

Если вы используете сервер NodeJS и промежуточное ПО ExpressJS, вы можете легко включить CORS с помощью ПО промежуточного слоя CORS. Вам просто нужно сделать следующее:

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

Но остерегайтесь последствия использования CORS в производственной среде, поэтому вы должны использовать его либо только в режиме разработки, либо с осторожностью в производственной среде.

Ответ принят как подходящий

В итоге я это исправил. Я добавил этот фрагмент кода в свой файл local.settings.json, и он исправил его, надеюсь, кто-то найдет это полезным!

"Host": {
    "CORS": "*"
  }

Другие вопросы по теме