2013-03-12 2 views
3

Meteor.router를 사용하여 web-app에 RESTful 인터페이스를 설정하고있다. 어떤 경우에는 비동기 적으로 호출을 실행하고 호출자에게 알맞은 상태로 말하고 싶습니다.Meteor로 비동기식 RESTful 인터페이스를 만드는 방법

그래서 같은 것을했을 :

먼저 유성 방법을 정의

Meteor.methods({ 
    async: function() { 
     //do nothing 
    } 
}); 

이 단지

Meteor.Router.add('/fieldData', 'POST', function (id) { 
    var that = this; 
    Meteor.call("async", function(err, res) { 
     storeFieldData(that.request.body); 
    }); 

    return [200, 'form data created']; 
}); 

은 무엇인가 콜백을 사용하려면 필요하기 때문에이 방법은 아무것도하지 않습니다 Meteor.call은 비동기 콜백을 생성하는 기능으로 사용됩니다.

내 무지가 나를 찾지 못하게하는보다 우아한 방법이있을 것이라고 확신합니다. 지적 해 주셔서 감사합니다.

+0

'var that = this' 상을받은 의미론 – Swadq

+0

그다지 도움이되지 않는다. –

+0

like this '별로 도움이되지 않습니다 : P? (that = this) 저항 할 수는 없지만 도움이 될만한 답변을 추가했습니다. – Akshat

답변

0

저는 이것이 비동기 자바 스크립트에 바인딩 될 필요가없는 REST 인터페이스를 제공해야하는 서버 js에 있다고 가정합니다. 예를 들어 당신이 할 수 있습니다 :

Meteor.Router.add('/fieldData', 'POST', function (id) { 
    var result = Meteor.call('foo', this.request.body) 
    return result; 
}); 
+0

당신이 말하는 것은 비동기 호출을 사용하지 않는다는 것입니다. –

+0

네, 그렇게 할 필요가 없습니다. 코드는 동기화 스타일 호출을 사용하면 훨씬 쉽습니다 (서버 측 코드 만이 방식으로 실행될 수 있지만 계속 사용하십시오). – Akshat

+0

그러나 node.js는 요청을 처리하기 전에 완료 될 때까지 대기합니다. 다음. 아니면 내 부분에 대한 오해인가? –

0

이 더 나은 방법이 있고 다른 유성 기능에 액세스 할 경우 도움이 : 파이버에게

코드를 사용는 다음과 같습니다

Meteor.Router.add('/fieldData', 'POST', function() { 
    var body = this.request.body; 
    Fiber(function() { 
     storeFieldData(body); 
    }).run(); 

    return [200, 'form data created']; 
}); 

내가 모르는 것은 실제로 파이버 내부에서 무엇인가를 반환하는 방법이다 :-(

관련 문제