【问题标题】:Importing a JSON file in Meteor在 Meteor 中导入 JSON 文件
【发布时间】:2013-02-28 17:22:24
【问题描述】:

我有一个要加载的 data.json 文件,我已将它放在 lib/ 文件夹中。我应该怎么做才能将该 JSON 加载到服务器中的变量中? 谢谢

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您可以通过三种方式来解决此问题,这取决于您最熟悉的方式和您的用例。

    首先是存储为JS对象

    如果您的 json 数据是 { "name":"bob" },您可以在 /lib 文件夹中的 .js 文件中使用 myjson = {"name":"bob"},并在需要时调用 myjson

    使用 http 调用

    您需要通过meteor add http 安装的Meteor http 软件包。

    服务器端代码

    myobject = HTTP.get(Meteor.absoluteUrl("/myfile.json")).data;
    

    客户端代码

    HTTP.get(Meteor.absoluteUrl("/myfile.json"), function(err,result) }
        console.log(result.data);
    });
    

    另一种方法是获取 json 文件 ajax 样式(不过,您必须将其放在 /public 文件夹中并使用 Meteor.http 调用它。

    直接读取文件

    最后,您可以直接读取文件,将 myfile.json 存储在项目根目录下的 private 目录中:

    var myjson = {};
    myjson = JSON.parse(Assets.getText("myfile.json"));
    

    如果你想在客户端访问它,你必须将它与 Meteor.methods 和 Meteor.call 接口

    所以无论你想要哪种方式,第一种都是最简单的,但我不太确定你想如何使用它,或者你是否想选择文件或其他方式

    【讨论】:

    • 我最终使用了第一个解决方案,因为它是最简单的。我将文件添加到 /server 所以它也不会加载到客户端上。谢谢
    • 嗨,Akshat,我尝试了您的代码,但我收到“ReferenceError:__meteor_bootstrap 未定义”。我的 json 文件和 js 文件在同一个文件夹中。
    • 这是客户端代码吗?以上仅适用于if(Meteor.isServer) {..} 块或运行服务器端js 的任何地方,例如/server 文件夹。 npm 模块不能包含在客户端中,因此您可以使用 http 调用获取它
    • 我已经把代码上传到我的github了。它的排行榜示例。 github.com/StudioMockingbird/SH_meteor
    • 很抱歉 @RishavSharan 是我的错 我错了它实际上是 __meteor_bootstrap__ 而不是 __meteor_bootstrap
    【解决方案2】:

    由于我对这一切都不熟悉,我怀疑这不是 正确的 方法,但是这对我有用......

    三个coffee脚本文件,两个在server目录下:

    server.coffee:

    Meteor.startup ->
        insertSample = (jsondata) ->
          Fiber(->
            Documents.insert
              name: "Sample doc"
              data: jsondata
          ).run()        
        if Documents.find().count() is 0
          insertJSONfile("tests/test.json", insertSample)
    

    并插入JSONfile.coffee:

    fs = __meteor_bootstrap__.require("fs")
    
    insertJSONfile = (file, insert) ->
      jsondata = undefined
      fs.readFile file, (err, data) ->
        throw err  if err
        jsondata = JSON.stringify(JSON.parse(data))
        insert(jsondata)
    

    和根目录中的model.coffee:

    @Documents = new Meteor.Collection("documents")
    

    在启动时,这应该加载 JSON 文件(在我的情况下,我将其存储在测试目录中)并将其插入到文档集合中的字段中。

    我很想听听其他人应该如何正确地做到这一点。

    【讨论】:

      【解决方案3】:

      我假设您希望将 json 内容表示为一个对象,而不是一个简单的字符串。

      我使用 js-yaml (https://github.com/nodeca/js-yaml),假设你安装了 npm 包。您也可以手动复制它。

      yaml = __meteor_bootstrap__.require('js-yaml')
      fs = __meteor_bootstrap__.require('fs')
      content = fs.readFileSync(file, 'utf8')
      object = yaml.load(content)
      

      就是这样!我个人将我的 json 保存到流星集合中。

      【讨论】:

      • 我更喜欢使用 JSON,因为我已经拥有该格式的文件。我在 Meteor 应用程序启动时将这个文件(包含城市和地区)加载到内存中。
      • 另外,如果使用 yaml,请查看大气上的 yaml 包,它已经为流星构建了
      猜你喜欢
      • 2013-09-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2017-02-02
      • 2018-10-04
      相关资源
      最近更新 更多