流星:从文件导入降价

Meteor: import markdown from file

我已经在 Meteor 上安装了 markdown 包:

meteor add markdown

并测试成功:

<body>
  {{#markdown}}
     #Hello world!#
  {{/markdown}}
</body>

好的!
现在我想从文件中导入降价,我尝试过这种方式:

if (Meteor.isClient) {
  Session.set("markdown_data","MDFile.md");

  Template.myTemplate.helpers({
    markdown_data: function() {
      return Session.get("markdown_data");
    }
  });
}

并且在 html 中:

<body>
  {{#markdown}}{{{markdown_data}}}{{/markdown}}
</body>

但是没有出现,无论是在网页上还是在网络控制台或终端上。

我哪里错了?

更新 - 工作代码

if (Meteor.isClient) {

  Markdown = new Mongo.Collection("markdown");
  
  Template.myTemplate.helpers({
    markdown_data: function() {
      var markdown = Markdown.findOne();
      return markdown && markdown.data;
    }
  });

 }

if (Meteor.isServer) {
    Markdown = new Mongo.Collection("markdown");
    Meteor.startup(function () {
      if(Markdown.find().count()===0){
        Markdown.insert({
               data: Assets.getText("teamProgramming.md")
        });
      }
  });
}

这样不行,你应该把你的markdown文件放在private目录下,作为资源服务器端加载,然后使用集合发送给客户端:

private/MDFile.md

#Hello world!#

lib/collections/markdown.js

Markdown=new Mongo.Collection("markdown");

server/startup.js

Meteor.startup(function(){
  if(Markdown.find().count()===0){
    Markdown.insert({
      data: Assets.getText("MDFile.md");
    });
  }
});

server/collections/markdown.js

Meteor.publish(function(){
  return Markdown.find();
});

client/views/main.html

<body>
  {{#markdown}}
    {{markdownData}}
  {{/markdown}}
</body>

client/views/main.js

Template.body.helpers({
  markdownData:function(){
    var markdown=Markdown.findOne();
    return markdown && markdown.data;
  }
});

没有数据库也可以做的更优雅。仅使用 Meteor 方法。

假设您的 /private 文件夹中有 test.md markdown 文件

server/methods.js

Meteor.methods({
    'getMarkdown'(markdownFile) {
        return Assets.getText(markdownFile);
    }
});    

client/helpers.js

Template.registerHelper('getMarkdown', (markdownFile) => {
    // if there is first no empty line in markdownFile
    // meteor's markdown helper renders <h1> as <pre>
    return '\n' + ReactiveMethod.call('getMarkdown', markdownFile);
});

为了从助手调用流星方法,我使用了这个 solution Is it a bad idea 中的包 simple:reactive-method 来从助手调用流星方法?我希望不是在这种情况下(这简化了 *md 文件的加载)

终于在你的一些模板中了

<template name="loadMarkdown">
    {{#markdown}}
        {{getMarkdown 'test.md'}}
    {{/markdown}}
</template>