【问题标题】:Meteor server side routes not being found未找到 Meteor 服务器端路由
【发布时间】:2015-08-01 15:28:35
【问题描述】:

我在 OS X 10.6.8 上运行 Meteor 1.1.0.2,今天早些时候,我通过 meteor add iron:router 安装了 IronRouter,所以我应该有最新版本。

我的路线文件中有这个:

Router.route('/create_profile',
    function () {
        var req = this.request;
        var res = this.response;
        res.end('hello from the server\n');
    }
    , {where: 'server'}
);

当我点击这个网址时:

http://localhost:3000/create_profile

我收到一条浏览器消息:

糟糕,客户端或服务器上似乎没有 url:“http://localhost:3000/create_profile”的路由。

如果我删除, {where: 'server'},那么它就可以工作。有什么建议我应该寻找什么?

【问题讨论】:

  • 这个文件在哪里?
  • @Kriegslustig: app/client/routes.js 我所有的路由都在里面,而且它们可以工作。这是我拥有的唯一服务器端路由,即使我将其从服务器上取下并将其保留为客户端路由,它也可以工作。
  • 将 router.js 更改为 app/lib/routes.js

标签: meteor


【解决方案1】:

Juan 的回答没有错,但他没有遵守惯例,也没有解释为什么你做错了。

TL;DR;在lib/routes.js 中定义您的路线。

服务器端路由是您在客户端提供内容加载流星的路由。在您的示例中,您只是提供一段文本。 client/ 中的代码在客户端执行。这意味着,它仅在加载流星后在客户端上运行。所以当你的服务器端路由被定义时,meteor 已经被加载了。

Iron-router 有点同构。这意味着,您可以在客户端和服务器上使用相同的 API。因此 Iron 假设路由是在通用代码中定义的(例如在 lib/ 中)。当您将选项where 设置为server 时,当代码在客户端运行时,iron 将忽略路由。当该代码在服务器上运行时,iron 会安装所谓的connectHandlers。它使用WebApp.connectHandlers.use API。这些处理程序使绕过流星核心的服务成为可能。

当您不加载流星核心时,您的客户端代码不会执行,共享代码仅在服务器上执行。

【讨论】:

  • 是的,就是这样,谢谢。我应该已经意识到它在客户端目录中,显然应该只包含客户端代码。
【解决方案2】:

根据您的评论:

将您的 routes.js 文件更改为公共目录,

app/lib/routes.js

您可以在Oficial Documentation 中了解有关如何构建应用程序的更多信息

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 2015-02-28
    • 2015-02-27
    • 2015-02-28
    • 2017-01-04
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多