2013-03-12 72 views
36

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

回答

78

有三种方法可以解决这个问题,这取决于您最喜欢的用例是&。

首先是它存储为一个JS对象

,如果你的JSON数据是{ "name":"bob" },你可以在一个.js文件中的文件夹/lib使用myjson = {"name":"bob"}并调用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.json在你的项目的根private目录:

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

如果要访问此客户端上你将不得不将其与Meteor.methods和Meteor进行接口。调用

所以,任何你想要的方式,第一种是最简单的,但我也不太清楚要如何使用它,或者你是否要选择文件或东西

+0

我结束了使用第一个解决方案,因为它是最简单的。我将该文件添加到/ server,以便它不会在客户端上加载。谢谢 – Alex 2013-03-14 00:01:35

+0

嗨Akshat 我试过你的代码,但我得到“ReferenceError:__meteor_bootstrap没有定义”。我的json文件与js文件位于同一个文件夹中。 – 2013-04-02 11:28:50

+0

这是客户端代码吗?以上仅适用于'if(Meteor.isServer){..}'块或任何服务器端js运行的位置,例如'/ server'文件夹中。 npm模块不能包含在客户端中,所以您可以通过http调用 – Akshat 2013-04-02 11:30:42

2

由于我新的这一切,我怀疑这是不是这样做的正确的方式,但是这已经为我工作...

三个咖啡脚本文件,两人在服务器目录:

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) 

和insertJSONfile.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文件(在我的情况我已经存储在这个测试目录)到文档中的一个字段采集。

我很想听听别人关于如何正确完成这件事。

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进入流星收藏。

+0

我更喜欢使用JSON,因为我已经有了这种格式的文件。我在Meteor应用程序的开始处加载此文件(其中包含城市和地区)。 – Alex 2013-03-14 00:02:51

+0

另外如果使用yaml看看yaml包装上的气氛,它已经为流星建造了 – Akshat 2013-03-14 00:09:49