• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd Access-Control-Allow-Origin, własne API

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
510 wizyt
pytanie zadane 1 października 2020 w JavaScript przez creend Gaduła (4,700 p.)
edycja 1 października 2020 przez creend

Zaczynam się uczyć Express.js i piszę bardzo proste api, które mi nie działa, wyrzuca błąd

Access to XMLHttpRequest at 'http://localhost:4000/' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.

Mimo iż dodałem linijkę 

res.set("Access-Control-Allow-Origin", "*");

Nie działa.

const express = require('express');
const app = express();

app.get('/', function (req, res, next) {
  res.set("Access-Control-Allow-Origin", "http://localhost:3000/");
  res.json({
    "status": "succes"
  })
})

app.listen(4000, function(){
  console.log('Listening')
})

obsługa na froncie: 

axios.get('http://localhost:4000/',{
    headers:{
      "Access-Control-Allow-Origin": 'http://localhost:3000'
  }
}).then(function (response){
    console.log(response);
})

 

1 odpowiedź

0 głosów
odpowiedź 1 października 2020 przez ScriptyChris Mędrzec (191,540 p.)
wybrane 1 października 2020 przez creend
 
Najlepsza

W dokumentacji express'a nie widzę metody addHeader na obiekcie res (w konsoli Node'a powinien być błąd) - dla pewności spójrz w nagłówki odpowiedzi w devtoolsach przeglądarki (czy Access-Control-Allow-Origin jest ustawiony). Do ustawiania nagłówków odpowiedzi służą metody res.append i res.set.

komentarz 1 października 2020 przez creend Gaduła (4,700 p.)

Dla res.append i res.set to samo, błąd z konsoli 

Access to XMLHttpRequest at 'http://localhost:4000/' 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.

 

komentarz 1 października 2020 przez ScriptyChris Mędrzec (191,540 p.)

Teraz błąd jest inny. Dziwne, że dla zwykłego GET przeglądarka wysyła preflight request. Obstawiam, że w axios niepotrzebnie ustawiasz nagłówek "Access-Control-Allow-Origin": 'http://localhost:3000' (nagłówki dla CORS ustawia się po stronie serwera, a nie klienta) - przeglądarka może to traktować jako nie "prosty request". Oczywiście zostaw ten nagłówek w express-ie.

1
komentarz 1 października 2020 przez creend Gaduła (4,700 p.)
Wszystko działa, dzięki wielkie :)

Podobne pytania

+1 głos
1 odpowiedź 1,722 wizyt
pytanie zadane 22 października 2017 w JavaScript przez robkop Użytkownik (930 p.)
+1 głos
0 odpowiedzi 192 wizyt
pytanie zadane 10 lutego 2021 w JavaScript przez michal_php Stary wyjadacz (13,680 p.)
0 głosów
3 odpowiedzi 7,980 wizyt

90,816 zapytań

139,494 odpowiedzi

313,557 komentarzy

60,313 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...