2014-10-13 1 views
1

Meteor에서 마이그레이션하는 동안 0.8.3 & IR 0.8.2에서 Meteor 0.9.3.1 & IR 1.0.0-pre3 I ' RouteControllers에 문제가 발생했습니다. RouteControllers를 [email protected] 서버 코드에 정의해야합니까?

나는이 프로젝트의 '/ 모두'폴더에 다음 JS :

Router.route('scene.index', { 
    path: '/', 
    controller: 'SceneController' 
}); 

그리고 SceneController JS '/ 클라이언트 트리에서 :

SceneController = RouteController.extend({ 
    template: 'SceneView' 
    ... 
}); 

액세스를 시도 클라이언트로부터의 경로를 통해 다음과 같은 오류가 발생합니다 :

Error: RouteController 'SceneController' is not defined. 
    at resolve (packages/iron:router/lib/route.js:94) 
    at Function.Route.findControllerConstructor (packages/iron:router/lib/route.js:116) 
    at Function.Route.createController (packages/iron:router/lib/route.js:134) 
    at Function.Router.createController (packages/iron:router/lib/router.js:181) 
    at Function.Router.dispatch (packages/iron:router/lib/router_server.js:66) 
    at Object.router (packages/iron:router/lib/router.js:15) 
    at next (/Users/pward/.meteor/packages/webapp/.1.1.2.1m8ln9s++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:190:15) 
    at Function.app.handle (/Users/pward/.meteor/packages/webapp/.1.1.2.1m8ln9s++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:198:3) 
    at Object.fn [as handle] (/Users/pward/.meteor/packages/webapp/.1.1.2.1m8ln9s++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:74:14) 
    at next (/Users/pward/.meteor/packages/webapp/.1.1.2.1m8ln9s++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:190:15) 

노드와 약간의 시간이 지난 후 -inspector, 나는 IR이 클라이언트 쪽 RouteControllers를 서버에 표시해야한다고 결론을 내 렸습니다.

내 경로 컨트롤러가 현재 세션 변수를 설정 했으므로 Meteor.isClient를 뿌리지 않는 것이 좋습니다. 이것은 IR 버그 또는 알려진 변경 사항입니까?

답변

2

My route controllers currently set session variables and I'd prefer not to sprinkle Meteor.isClient around. Is this an IR bug or a known breaking change?

당신은 단지가 공유 폴더에 선언에도 경우 클라이언트 측에서 실행되는 것 때문에 Meteor.isClient와 컨트롤러 코드를 보호 할 필요가 없습니다.

귀하의 경로 정의는 더 나은 iron:[email protected]에 다음과 같이 기록됩니다

Router.route('/', { 
    name: 'scene.index', 
    controller: 'SceneController' 
}); 

이름/경로는 자신의 위치를 ​​전환했다.

편집 : 클라이언트 모두에 정의

http://eventedmind.github.io/iron-router/#client-and-server

갖는 경로를 서버가 수행 할 작업을 결정 필수입니다 :

지금까지 iron:router 개념에 관한 한,이 읽어 보시기 바랍니다 .

클라이언트 측 경로에 대한 링크가 감지되면 HTML5 pushState API를 사용하여 탐색 할 수 있습니다. 서버 경로가 감지되면 표준 HTTP 통신이 수행됩니다 (예 : 서버 경로를 사용하여 내 앱에서 다운로드 가능한 리소스), 링크가 라우터에 대한 알려진 경로와 일치하지 않으면 오류가 발생합니다.

It also means that on the server, if there is no client route defined, we can send a 404 response to the client instead of loading up the Meteor application.

+0

빠른 응답 주셔서 감사합니다 :

서버 측, 그것은 유성 응용 프로그램을 제공하는 대신 알 수없는 경로에 404를 보내 클라이언트 경로에 대해 아는 것이 중요합니다, 여기에 공식 가이드에서 이에 대한 견적입니다 이름/경로 스와핑에 대한 수정 – pward123

+0

나는이 버그 또는 변경 사항인지 계속 알고 싶기 때문에이 대답을 수락하지 않습니다. EventedMind의 "em"스캐 폴딩 도구가 클라이언트/컨트롤러 폴더를 생성한다는 것을 감안할 때, IR이 지원하지 않는다는 것이 다소 이상하게 보입니다. – pward123

+0

내 답변을 편집했습니다. 짧게 말해서, 버그가 아니라 크게 달라졌습니다.em 스캐 폴딩 도구는 아마도 최신 '철 : 라우터'뒤에 약간있을 것입니까? – saimeunt

1

예, 저는 router.js를 공유 공통 코드 (server/또는 client /로 이름 지정되지 않은 폴더)에 항상 배치했습니다.

관련 문제