Router.current().route.getName() 返回错误服务器端

Router.current().route.getName() is returning an error server side

当我在方法调用(服务器端方法)中使用它时,

Router.current().route.getName() 返回错误。我以为他们说 Iron-Router 应该在客户端和服务器端工作。我得到的错误是

Error invoking Method 'mySeverSideMethod': Internal server error [500]

请帮忙。

是的,iron:router 可以创建服务器端路由,但是 api 仅用于客户端

From the docs:

Router.route('/download/:file', function () {
  // NodeJS request object
  var request = this.request;

  // NodeJS  response object
  var response = this.response;

  this.response.end('file download content\n');
}, {where: 'server'});

您有权访问 NodeJS 请求对象,因此您应该能够在那里找到您需要的内容,例如this.request.route, this.request.path.

你说对了一半,路由器在客户端和服务器上都可以工作。但是,服务器端实现适用于服务器端路由(例如 REST 端点)。 client/server 与 iron:router 之间没有 "state" 共享(在方法内部调用时),因此 Router.current().route.getName() 会抛出此错误,因为 Router.current() 未定义.

调用方法时,您不会通过 Iron-Router 定义的 'route':它是由 Meteor 框架定义的路由。它不关心客户端在什么路由上。

因此,如果您需要知道客户端从哪个页面调用端点,您应该将其作为参数传递给方法。

Meteor.methods({
    "myEndPoint": function(route) {
        // use route here.
        return //something
    }
})