2012-08-13 17 views
2

Node.js에서 작동하는 Angular.js 응용 프로그램을 시험하고 있습니다. Node.js 외부에서 require() 사용

현재 당신이 볼 수 있듯이, 나는 모델 파일에 액세스 할 수() 필요 사용하고 파일 MY-PROJECT/public/js/controllers.js

function LoginController($scope) 
{ 
    // fetch waiters 
    var Waiter = require('../models/waiter.js'); 
} 
LoginController.$inject = ['$scope']; 

에 아래의 코드를 가지고있다. 하지만이 파일/폴더에서 require() - 함수에 액세스 할 수없는 것 같습니다.

나는 페이지가 방문 할 때 내가 콘솔에서 얻을 오류 :

ReferenceError: require is not defined

내가 직접 스크립트 내 HTML 파일에 파일을 controllers.js 포함하기 때문에 오류의 원인은 가장 확실히

-tags (Node.js의 require() - 함수는 사용할 수 없다).

이제 내 질문은 : controllers.js 파일에서 모델 파일 (예 : MY-PROJECT/models/waiter.js)에 액세스 할 수 있습니까?

미리 감사드립니다.

+0

waiter.js의 예제와 같이 html 파일의 node.js 및/또는 waiter.js에 스크립트 참조를 추가해보십시오. Gloopy

답변

0

나는 그것을 모두 잘못하고 있었다. 내가 'realtime-app'(정확한 이름입니까?)을 만들고 Socket.io을 사용하고 있기 때문에 다르게 작동합니다.

클라이언트 컨트롤러에서 데이터를 요청하기 위해 서버에 메시지를 보냅니다. 서버는 데이터를 가져 와서 클라이언트로 다시 보냅니다.

따라서 서버에서 JSON 형식의 데이터를 얻으므로 클라이언트에서 실제로 모델을 요구하지 않아도됩니다. 이것은 내가 그것을 해결하는 방법입니다

, 다른 사람에게 유용 할 수 있습니다 :

/** 
* Login controller 
*/ 
function LoginController($scope, socket) 
{  
    // listen to server when it sends you the cats 
    socket.on('here-are-all-the-cats', function (cats) 
    { 
     $scope.cats = cats; 
    }); 

    // send message to the server, to request the waiters 
    socket.emit('i-want-all-the-cats'); 
} 
WaiterController.$inject = [ '$scope', 'socket' ]; 

참고 : 난 그냥 다른 사람들에게 좀 더 명확하게하기 위해, '고양이'대신 '웨이터'의 사용.

+0

emit()을 호출하기 전에 리스너를 설치해야합니까? –

+0

나는 이것을 테스트했으며 emit(); 하지만 emit() 전에 청취자를 배치하는 것이 가장 좋습니다. 업데이트 됨! – Voles

1

RequireJS은 필요한 것 같습니다.

+0

감사합니다. . 전에 RequireJS를 사용했는데이 파일 하나만으로 어떻게 사용할 수 있습니까? – Voles

+0

아직 사용하지는 않았지만 [API 문서] (http://requirejs.org/docs/api.html)가 도움이되었습니다. –

+0

또 다른 해결책을 찾았습니다. 내 대답은 아래 (또는 위)를 참조하십시오. – Voles

관련 문제