elh*_*ine 2 meteor iron-router
我正在为我的应用程序使用IronRouter.最近我想休息一下:
Router.route('/api/hello', { where: 'server' })
.get(function () {
this.response.end('Helo world');
});
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外:
Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions. at AccountsServer.userId (accounts_server.js:80:13) at AccountsServer.user (accounts_common.js:53:23) at Object.Meteor.user (accounts_common.js:230:19) at [object Object]. (lib/routes_permission.js:33:21) at packages/iron_router/lib/router.js:277:1 at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1) at [object Object].hookWithOptions (packages/iron_router/lib/router.js:276:1) at boundNext (packages/iron_middleware-stack/lib/middleware_stack.js:251:1) at runWithEnvironment (packages/meteor/dynamics_nodejs.js:110:1) at packages/meteor/dynamics_nodejs.js:123:1
Run Code Online (Sandbox Code Playgroud)
我在'(lib/routes_permission.js:33:21)中跟踪了这个问题.似乎一切都很好.
// user with no role
Router.onBeforeAction(function() {
var user = Meteor.user(); //This is the line.
if(user && !user.roles) {
this.render('roles');
return;
}
this.next();
});
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我得到这个例外.我的出版物中没有任何Meteor.userId().
任何见解?
服务器端路由像REST端点一样被访问,因此它们没有身份验证的概念(Meteor.user并且Meteor.userId会抛出错误).因为您的routes_permission.js文件是在共享目录中定义的,所以它的规则也会被用于服务器路由.您有关于如何解决此问题的一些选择,但最简单的可能只是来包装你onBeforeAction有Meteor.isClient像这样:
if (Meteor.isClient) {
Router.onBeforeAction(...);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |