流星铁路由器错误:没有方法'去'

时间:2016-05-26 09:16:23

标签: exception meteor iron-router

在服务器端方法中将记录插入集合后,我将路由到不同的命名路由。但我得到一个错误:“没有方法'去'”。

Meteor.methods({
  'create_item': function (item) {

    Items.insert(item, function (error,result){
      if(result){
        Router.go('dashboard');
      }
    });
  },
});

路由更改成功,页面呈现仪表板模板,但是出现以下错误。

  

I20160526-12:00:15.662(3)?异步函数回调中的异常:   TypeError:对象函数路由器(req,res,next){

     

I20160526-12:00:15.662(3)? router.dispatch(req.url,{

     

I20160526-12:00:15.662(3)? // XXX这假设没有其他路由器   我们应该修复的父堆栈

     

I20160526-12:00:15.662(3)?要求:req,

     

I20160526-12:00:15.663(3)? ,下一个);

     

I20160526-12:00:15.662(3)?回复:res

     

I20160526-12:00:15.663(3)?没有方法'go'

     

I20160526-12:00:15.663(3)?在lib / methods.js:17:16

2 个答案:

答案 0 :(得分:1)

您可能在共享区域(例如lib目录)上定义了方法,因此在客户端上它的工作正常,但在服务器端没有Router.go这样的功能。

您应该从方法返回结果,然后在客户端端代码上调用Router.go

在服务器上:

Meteor.methods({
    'create_item': function (item) {
        //Insert blocks on server side,
        //no need to use callback
        return Items.insert(item);
    },
});

在客户端:

Meteor.call('create_item', item, function(err, res) {
    if (err) {
        console.error(err);
    } else {
        Router.go('dashboard');
    }
});

答案 1 :(得分:1)

谢谢拉米尔。

最后我发现在服务器端无法找到lib。我还发现了AutoForm挂钩 - 这是一种运行插入代码的更智能的方法。

我将这个钩子连接到铁路线(确切地说是铁路控制器)

onRun: function () {
    AutoForm.hooks({
      createItemForm: {
        onSuccess: function(){
         Router.go('dashboard');
        }
      }
    });
    this.next();
  },