2017-12-12 40 views
0

Node, Express 및 MySQL을 사용하여 로컬로 내 웹 사이트를 개발하려고합니다. 이렇게하면 로컬 MySQL 서버를 설치했습니다. 내 로컬 노드 svrApp.js 웹 서버를 실행 한 다음 localhost : 3000 (Chrome 버전 62.0.3202.94 (공식 빌드) (64 비트) 사용)에 연결하면 CORS (크로스 원본 공유) 오류가 발생합니다.CORS 오류가 발생하는 순수 로컬 개발 환경

나는 CORS에 대한 많은 연구를 해왔으며, 그것이 무엇인지, 왜 그런지 등을 얻습니다.하지만 아직도 이해할 수없는 것은 내가하는 모든 것이 로컬 일 때 그것을 사용해야 할 이유입니다. . 그게 모두 똑같은 도메인이어야합니다, 그렇죠? 같은 localhost, 같은 포트. 내 생산 버전의 코드와 동일한 버전의 코드는 CORS를 전혀 처리하지 않아도 잘 작동합니다. 그래서, 내가 크로스 도메인을 사용하고 있다고 들었을 때 로컬에서 무슨 일이 일어나고있는 것입니까? 나는이 일을 할 필요가 있다고 확신하지 않지만이 문제가 CORS 오류를 일으키는 원인을 찾지 못하는 것 같습니다.

여기 CORS를 사용해야한다면 괜찮습니다. 그렇다면 내 모든 연구에 대해 내가 가지고있는 것조차도 작동시킬 수 없기 때문에 여전히 근본적인 것이 빠져 있습니다. 녹이다.

아래 코드는 서버 쪽에서 생성 된 선택 쿼리의 결과가있는 테이블을 렌더링하기 위해 서버에 대한 SQL 요청을 만드는 클라이언트 측 코드입니다. 다시 말하지만 모든 것이 로컬로 호스팅됩니다. 페이지, SQL 서버, 모든 것.

var ip = "localhost:3000/"; 

function afterPageLoad(){ 
var req = new XMLHttpRequest(); 
var data = {}; 
req.open("GET", ip+"EAselect", true); 
req.withCredentials = true; 
req.setRequestHeader("Content-Type", "application/json"); 
req.addEventListener("load", function(dataResponse, status){ 
    if(req.status >= 200 && req.status < 400){ 
     dataResponse = JSON.parse(req.responseText); 
     buildTable(dataResponse); 
    }else{ 
     console.log("Error: " + req.status + ", " + req.statusText); 
    } 
}); 
req.send(JSON.stringify(data)); 
} 

다음은 서버의 경로 처리기입니다. CORS 액세스를 허용하는 응답 헤더를 추가했지만 기쁨은 없습니다.

/* Select Query*/ 
app.get("/EAselect", function(req,res,next){ 
res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, 
Content-Type, Accept"); 
pool.query("SELECT * FROM workouts", function(err, rows, fields){ 
    if(err){ 
     console.log("query failure. " + err.description); 
     next(err); 
     return; 
    }else{ 

     res.send(JSON.stringify(rows)); 
    } 
}); 
}); 

단순히 모든 지역이기 때문에 서버 나 클라이언트에 CORS 구현하지 않고 내 로컬 리소스에 연결할 수 있기를 기대합니다.

내가지고있어 결과는 : 나는 CORS 로컬 호스팅 서비스와 관련된 뭔가를 광범위하게 여기 검색하지만, 특히이 문제를 해결 아무것도 발견되지 않은

Failed to load localhost:3000/EAselect: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https. 

.

관련 정보를 추가하기 위해 내가 생각할 수있는 모든 것입니다. 도움이 필요한 사항을 놓친 경우 알려 주시면 기꺼이 수정하겠습니다. 도움이나 설명에 감사드립니다.

답변

1

당신은 프로토콜을 지정하기 위해 시도 할 수 있습니다 :

var ip = "http://localhost:3000/"; 
+0

나의 사과를 늦게 다시 이것에 얻기를 위해. 나는 일주일 동안 일했다. 이것에 대한 여분의 눈 세트를 가져 주셔서 감사합니다, hannes! 그 수정은 내가 그것을 얻는 것을 허락했던 잘못을 바꿨다! 고맙습니다! –