为什么Meteor使用这个IronRouter代码变得暴躁?

时间:2015-10-07 16:45:10

标签: javascript meteor iron-router stderr

在回应AutumnLeonard here的评论时,我尝试了这个想法的简约实现。我首先通过" meteor add iron:router"添加铁路由器包。然后尝试了这段代码:

blogtest.html:

(b,n,m)

blogtest.js:

<head>
  <title>blogtest</title>
</head>

<body>
  <h1>This is really something, isn't it!?!</h1>

  {{> thought}}
  {{> anotherthought}}
</body>

<template name="thought">
  <p>THis is a random thought.</p>
</template>

<template name="anotherthought">
  <p>THis is another random thought.</p>
</template>

(前两行是我添加的唯一一行;其余的是多余但无害的&#34;样板&#34;默认流星应用程序留下的代码)

...但是在尝试运行它时,它失败了,从命令提示符发出悸动的蓝色和紫色咆哮,以及:

Router.route("/:blog_post_title", {template: "thought", name: "thought"});
Router.route("/:blog_post_title", {template: "anotherthought", name: "anotherthought"});

if (Meteor.isClient) {
  // counter starts at 0
  Session.setDefault('counter', 0);

  Template.hello.helpers({
    counter: function () {
      return Session.get('counter');
    }
  });

  Template.hello.events({
    'click button': function () {
      // increment the counter when button is clicked
      Session.set('counter', Session.get('counter') + 1);
    }
  });
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

(为什么它抱怨&#34; anotherthought&#34;但不是&#34;另一个&#34;如果我的IronRouter语法在这里错了?)

W20151007-09:25:00.634(-7)? (STDERR) Error: A route for the path "/:blog_post_ti
tle" already exists by the name of "anotherthought".

(第2行,第8行是&#34; r&#34;在&#34;在路由器路由中#34;在第二行...... ???)

W20151007-09:25:00.635(-7)? (STDERR)     at blogtest.js:2:8

(blogtest.js中没有第37行...... ???)

更新

好的,所以我将HTML更改为:

W20151007-09:25:00.635(-7)? (STDERR)     at C:\Misc\blogtest\.meteor\local\build
\programs\server\app\blogtest.js:37:4

...以及路由代码:

<head>
  <title>blogtest</title>
</head>

<body>
  <h1>Here's a thought:</h1>

  <!-- {{> thought}}
  {{> anotherthought}} -->
</body>

<template name="thought">
  <p>This is a random thought.</p>
</template>

<template name="anotherthought">
  <p>This is another random thought.</p>
</template>

......它不再无法运行;事实上,当我进入&#34; http://localhost:3000/thought&#34;时,我确实看到了我的期望,即:

Router.route("/thought", {template: "thought", name: "thought"});
Router.route("/anotherthought", {template: "anotherthought", name: "anotherthought"});

......以及我对#34; http://localhost:3000/anotherthought&#34;的期望,即:

Here's a thought:

This is a random thought.

但是,我在localhost:3000(默认URL)中看到了这一点:

Here's a thought:

This is another random thought.

那么我需要输入什么以便&#34;哎呀&#34;消失了?需要什么Route.route()?

3 个答案:

答案 0 :(得分:2)

你定义了两条相同的路线(&#34; /:blog_post_title&#34;),我猜不能相同。也许你可以尝试改变其中一个。也许你可以定义为另一个&#34; /:blog_post_title2&#34;。

只是我的2美分

答案 1 :(得分:1)

你听起来不高兴:-(流星是一种学习曲线,但对我来说它非常值得。

我在这里看到的一些事情可能会让你失望。

模板与路线:路线与模板之间的差异。

模板就像填写一些HTML的配方。在模板中嵌套模板有助于将应用程序分解为更小的部分。

路线就像擦除一切并重新开始。您基本上删除了所有HTML,并从一个新模板开始。

这种差异来自之前构建网络应用程序的方式,现在仍然非常有用。

模板包含:您不会使用这样的路线:{{> thought }}。这是包含模板的语法 这将导入HTML模板(就像您要定义的那样)。你不需要一条路来完成这项工作。

路线:此处,路线正在定义顶部模板。他们擦除所有内容(例如会话变量等异常)并重新开始。

路径很重要,因为它标识了应用中的位置。这个用户可以在应用中为地点添加书签。

具有相同路径的两条路线肯定是错误的。哪个应该用于书签?删除其中一条路线以继续前进。

正文:您不能像处理HTML顶部那样填充正文。 (嗯,你可以,但它不是最佳做法:-) Meteor基本上将路线模板附加到标签上。它没有定义<body>,但它是如何工作的。

<body>更改为<template name="main">,然后修正</body>

然后将模板添加到路线:

Router.route("/", {template: "main"});

这可能不会100%有效,但它应该让你通过一些你已经拥有的这些块。

此外,放松,玩得开心!来自PHP和Angular / Express后,Meteor非常有趣!

您可以尝试Discover Meteor本书。这对我来说是一个很好的开始。刚花了几天才开始。

答案 2 :(得分:0)

事实证明,它比我尝试的更容易;大多数那种花哨的东西都是臭气熏天的。

* .js文件中我需要的只是:

Router.route('/');
Router.route('/thought');
Router.route('/anotherthought');

以下HTML按预期工作(仅显示“localhost:3000”的H1,并且当我将“/ thought”或“/ anotherthought”附加到该基本URL时,除了H1之外还显示相应的模板。< / p>

<head>
  <title>blogtest</title>
</head>

<body>
  <h1>Here's a thought:</h1>
</body>

<template name="thought">
  <p>This is a random thought.</p>
</template>

<template name="anotherthought">
  <p>This is another random thought.</p>
</template>

因此,要创建一个我可以添加内容的流星应用程序,我需要做的就是:

0)在命令提示符下,输入“ meteor create <projectName> ”,例如:“ meteor create ideas

1)按照指示cd'ing到目录(即projectName)后,输入“ meteor add iron:router

2)因此,您的“原始”网址不会引发铁异常,请将其添加到.js文件中:

Router.route('/');

3)每次我想公开一些东西时,都会在.html文件中添加一个新模板。

4)然后(每次),在.js文件中添加一个带有模板名称的路由指令;例如,如果您添加此模板:

<template name="thought">
  <p>This is a random thought.</p>
</template>

...您可以将此行添加到.js文件中:

Router.route('/thought');

5)在命令提示符处输入“ meteor deploy ”,使您的流星应用程序公开;例如,您可以输入“ meteor deploy ideas ”或“ meteor deploy rompecabeza ”(部署的名称不必与项目名称匹配)。

6)建议任何你想看到它的人“将他们的浏览器指向”你的URL,例如“嘿,帮派!去捷克'<your URL, with the appended template name>'!你可以给我一分钱后来!的“

这就是它的全部内容。

例如,我创建了一个静态网站,用于提供我的一些照片。他们可以通过以下链接看到:

http://dplatypus.meteor.com/pinnacles
http://dplatypus.meteor.com/garrapatabeach
http://dplatypus.meteor.com/garrapataturnout
http://dplatypus.meteor.com/mcwayfalls
http://dplatypus.meteor.com/pfeifferbeach

或者,您只需点击dplatypus.meteor.com上面的链接

即可