2012-04-22 5 views
3

나는 node.js로 놀았으며 그 다음에 익스프레스 프레임 워크를 발견했습니다. 다른 포트가 사용 중일 때 작동하지 않을 수 있습니다.node.js, express 및 다른 포트

내 맥에서 실행중인 MAMP 서버 인 http://localhost:8888에 내 아약스가 있습니다.

$.ajax({ 
    url: "http://localhost:1337/", 
    type: "GET", 
    dataType: "json", 
    data: { }, 
    contentType: "application/json", 
    cache: false, 
    timeout: 5000, 
    success: function(data) { 
     alert(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert('error ' + textStatus + " " + errorThrown); 
    } 
}); 

내 Node.js를 서버가 http://localhost:1337/에서 실행 볼 수 있듯이. 결과적으로 아무 것도 반환되지 않고 오류가 발생합니다.

이 방법이 있습니까?

감사

+1

귀하의 질문을 이해하는 방식으로 localhost : 8888에서 웹 페이지를로드 한 다음 localhost : 1337에 $ .ajax 호출을 수행합니다. 그 맞습니까? 그렇다면 동일한 원산지 정책을 사용하고있는 것입니다. – Barend

+0

맞습니다.그래서이 문제를 해결하는 유일한 방법은 node.js 서버에서 내 웹 사이트를 실행하여 동일한 포트를 사용하는 것입니다. 하지만 80 번 포트에서 호스팅되는 웹 사이트에이 라이브를 설치하고 검색과 같은 요청을하기 위해 node.js 서버에 연결하려면 어떻게해야합니까? 대부분의 사람들은 어떻게 이것을합니까? –

+1

선호하는 접근법 (IMHO)은 역방향 프록시를 사용하여 모든 요청을 동일한 호스트/포트로 이동시키고 그 뒤에서 경로를 재 지정하는 것입니다. 드문 일이 아닌 해결 방법은 JSONP를 사용하는 것이지만, 보안상의 이유로 JSONP를 개인적으로 좋아하지 않습니다. – Barend

답변

4

당신이 가진 문제는 당신이 크로스 원산지 요청을 만들려고하고이 브라우저 (허용하지 않는 점이다 예, 다른 같은 다른 포트 카운트와 같은 호스트 이름 원산지). 다음 세 가지 옵션이 있습니다.

1. 요청을 프록시하십시오.

가능한 경우이 작업을 수행하십시오. 8888 서버 에서 실행되는 코드를 작성하여 1337 프록시 서버에 요청합니다. 또한 둘의 앞에 프록시를 고집 하여이 작업을 수행 할 수 있습니다, Nginx와 같은 일이

2. CORS (교차 리소스 공유)를 설정 꽤이 잘 쉬운 입니다

참조 : http://en.wikipedia.org/wiki/Cross-origin_resource_sharinghttps://developer.mozilla.org/en/http_access_control

이것은 교차 원어 요청이 여기 있다는 것을 브라우저에 알리기 위해 응답에 헤더를 추가하는 것을 의미합니다. 특급 서버에서 다음과 같은 미들웨어를 추가

function enableCORSMiddleware (req,res,next) { 
    // You could use * instead of the url below to allow any origin, 
    // but be careful, you're opening yourself up to all sorts of things! 
    res.setHeader('Access-Control-Allow-Origin', "http://localhost:8888"); 
    next() 
    } 
server.use(enableCORSMiddleware); 

3. JSONP

이것은 당신이 자바 스크립트 코드와 같은 "AJAX"응답을 인코딩 트릭이다. 그런 다음 브라우저에 해당 코드를로드하도록 요청하면 브라우저가 원산지 교차 스크립트를로드하여 원산지 문제를 해결할 수 있습니다. 또한 다른 사람들도 그것을 얻을 수있게 해줍니다. 그래서 당신이 원하는 것이 맞는지 확인하십시오!

server.enable("jsonp callback"); 

그런 다음을 사용하여 응답을 보내 : 당신이 자바 스크립트 함수 호출에 응답을 포장해야하는 서버 측에서

는이 같은 "JSONP 콜백"옵션을 선택하면 자동으로이 작업을 수행 할 수 있습니다 표현 응답의 "JSON()"방법 : 당신이 jQuery를에 JSONP를 enanble 수있는 클라이언트 측에서

server.get("/ajax", function(req, res) { 
    res.json({foo: "bar"}); 
}); 

바로 데이터 유형 옵션에서 "JSON"을 "JSONP"를 변경하여 :

dataType: "jsonp", 
관련 문제