37

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

4

3 回答 3

80

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

第一种是将其存储为 JS 对象

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

使用 http 调用

您需要Meteor http通过meteor add 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.jsonprivate项目根目录中的目录中:

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

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

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

于 2013-03-13T00:15:12.967 回答
2

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

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

服务器.咖啡:

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 文件(在我的情况下,我将其存储在测试目录中)插入到文档集合中的一个字段中。

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

于 2013-03-13T00:14:40.333 回答
1

我假设您希望将 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 保存到流星集合中。

于 2013-03-13T12:51:30.207 回答