Javascript 是否需要在iron的服务器代码中定义RouteController-router@1.0.0-pre3
在尝试从Meteor 0.8.3和IR 0.8.2迁移到Meteor 0.9.3.1和IR 1.0.0-pre3时,我遇到了RouteController的问题 我在项目的“/tweet”文件夹中有以下js:Javascript 是否需要在iron的服务器代码中定义RouteController-router@1.0.0-pre3,javascript,meteor,iron-router,Javascript,Meteor,Iron Router,在尝试从Meteor 0.8.3和IR 0.8.2迁移到Meteor 0.9.3.1和IR 1.0.0-pre3时,我遇到了RouteController的问题 我在项目的“/tweet”文件夹中有以下js: Router.route('scene.index', { path: '/', controller: 'SceneController' }); 以及“/client”树中的SceneController js: SceneController = RouteCont
Router.route('scene.index', {
path: '/',
controller: 'SceneController'
});
以及“/client”树中的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)
在与node inspector相处了一段时间之后,我得出结论,IR需要客户端RouteController在服务器上可见
我的路由控制器目前设置了会话变量,我不想到处散布Meteor.isClient。这是一个IR错误还是一个已知的破坏性更改?是的,我总是将我的router.js放在共享公共代码中,即任何未命名为server/或client/的文件夹中 我的路线控制器当前设置了会话变量,我更喜欢 不要把流星洒在周围。这是IR错误还是已知错误 零钱 你不需要用Meteor.isClient保护你的控制器代码,因为它只会在客户端执行,即使它是在共享文件夹中声明的 在
iron:router@1.0.0-pre3
:
Router.route('/', {
name: 'scene.index',
controller: 'SceneController'
});
名称/路径已切换其位置
编辑:
关于iron:router
概念,请阅读以下内容:
必须在客户端和服务器上定义路由,才能确定需要执行的操作
客户端,如果检测到指向客户端路由的链接,则我们可以使用HTML5 pushState API导航到该链接;如果检测到服务器路由,则会发生标准HTTP通信(例如,我使用服务器路由在我的应用程序中提供可下载的资源),如果该链接对应于路由器的未知路径,然后会触发一个错误
服务器端,了解在未知路径上发送404的客户端路由非常重要,而不是为Meteor应用提供服务,以下是官方指南中对此的引用:
这还意味着在服务器上,如果没有定义客户端路由,
我们可以向客户端发送404响应,而不是加载
流星应用
感谢您的快速响应和对名称/路径交换的更正我将暂缓接受此答案,因为我仍然想知道这是一个bug还是一个突破性的更改。鉴于EventedMind的“em”脚手架工具创建了一个client/controllers文件夹,IR不支持它们似乎有点奇怪。编辑我的答案,长话短说,这是一个突破性的改变,不是一个bug。em脚手架工具可能有点落后于最新的
iron:router
?感谢您的澄清。我将接受这一点,但服务器应该已经知道客户端路由,因为我已经在服务器代码中定义了Router.route。在以前版本的IR中,它不需要定义实际的控制器,只需要定义路由