ตอบสนอง JS: ข้อผิดพลาด CORS ทำให้เกิด NetworkError เมื่อพยายามดึงทรัพยากร

ฉันพบ สิ่งนี้ ซึ่งช่วยฉันได้แล้ว แต่หลังจากเพิ่มส่วนหัวเช่นนี้ใน proxy.js ของฉัน:

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
    app.use(function(req, res, next) {
//adding headers to allow CORS
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();

    });
    app.use(proxy('/api', { target: 'http://localhost:8080' }));
}

ที่ fetch() ฉันได้เพิ่มส่วนหัวเพื่อให้แน่ใจว่าใช้งานได้:

fetch('http://localhost:8080/api',{
            headers:{
                'Access-Control-Allow-Origin':'*'
            },

        })
            .then(res => res.json())
            .then((data) => {
                this.setState({ contacts: data })
            })
            .catch(console.log)
    }

ฉันยังคงได้รับข้อผิดพลาด: TypeError: "NetworkError เมื่อพยายามดึงทรัพยากร"

this.setState({ contacts: data }) ควรจัดเก็บวัตถุ JSON ที่ถูกส่งโดยโปรแกรม Backend Java ของฉัน วัตถุ JSON อยู่ที่ localhost:8080/api และเป็นเพียงสตริง

ส่วนหน้า React ของฉันทำงานบน localhost:3000

ส่วนหัวการตอบกลับจะมีลักษณะเช่นนี้

ฉันต้องใช้ส่วนหัวนี้ที่ไหนเพื่อไม่ให้ได้รับข้อผิดพลาด CORS โดยเฉพาะอย่างยิ่งฉันต้องการทำงานโดยไม่มีไลบรารี npm "cors" หรือส่วนเสริมของเบราว์เซอร์ ฉันควรแทนที่ '*' ด้วย localhost:8080 ถ้าฉันจำไม่ผิดใช่ไหม เป้าหมายสุดท้ายของฉันคือการใส่สตริงเหล่านี้ใน PrimeReact Component (A Table) แบบไดนามิก

แก้ไข: ข้อความแสดงข้อผิดพลาดแบบเต็มที่ร้องขอโดย sideshowbarker:

คำเตือน:

คำขอข้ามต้นทางถูกบล็อก: กฎแหล่งที่มาเดียวกันห้ามไม่ให้อ่านทรัพยากรภายนอกที่ http://localhost:8080/api. (เหตุผล: ช่องสัญญาณ preflight CORS ไม่สำเร็จ)

คำเตือน:

คำขอข้ามต้นทางถูกบล็อก: กฎแหล่งที่มาเดียวกันห้ามไม่ให้อ่านทรัพยากรภายนอกที่ http://localhost:8080/api. (เหตุผล: ช่องสัญญาณ preflight CORS ล้มเหลว)

ข้อผิดพลาด:

TypeError: "NetworkError เมื่อพยายามดึงทรัพยากร

//เป็นภาษาเยอรมัน เลยอัพโหลดภาพหน้าจอไม่ได้ แปลแล้วลืมบอกไปว่าใส่ @CrossOrigin ใน Restcontroller ด้วย


person unknown austrian    schedule 05.02.2020    source แหล่งที่มา
comment
ข้อความแสดงข้อผิดพลาดเต็มรูปแบบที่เบราว์เซอร์กำลังบันทึกในคอนโซล devtools คืออะไร   -  person sideshowbarker    schedule 05.02.2020


คำตอบ (2)


ไม่สามารถแสดงความคิดเห็นได้เนื่องจากมีตัวแทนต่ำ แต่คุณได้ตั้งค่า app.listen(8080); ?

นอกจากนี้ฉันไม่คิดว่าคุณจำเป็นต้องเปลี่ยนแปลงอะไรที่เกี่ยวข้องกับ CORS หากคุณใช้งานทั้งสองอย่างที่ localhost

คุณอาจมีการเปลี่ยนแปลงบางอย่างในเบราว์เซอร์ของคุณที่อาจก่อให้เกิดสิ่งนี้หรือไม่? ลองใช้เบราว์เซอร์อื่นใช่ไหม

นอกจากนี้ ฉันอยากจะแนะนำให้ใช้ axios โดยกำหนดให้เป็น GET ที่ด้านหน้าและด้านหลัง ตรวจสอบให้แน่ใจว่าเมื่อคุณไปที่ http://localhost:8080/api บนเบราว์เซอร์ คุณจะได้รับ JSON บนหน้าจอ

person btnhawk    schedule 05.02.2020
comment
ฉันเพิ่ม app.listen ก่อน app.use(function(req, res, next) { แต่ไม่มีอะไรเกิดขึ้น และ localhost แสดง JSON - person unknown austrian; 06.02.2020

หลังจากการดีบักเป็นเวลานับไม่ถ้วน ปรากฎว่าฉันไม่ได้ใส่ http.cors(); ลงใน WebSecurityConfig.java ของฉัน ฉันค้นพบสิ่งนี้หลังจากที่ฉันอ่านบทช่วยสอนนี้: https://www.baeldung.com/spring-security-cors-preflight

person unknown austrian    schedule 10.02.2020