我有一个data.json文件,我想要加载并放入lib /文件夹中。我应该怎么做才能将该JSON加载到服务器中的变量中? 感谢导入Meteor中的JSON文件
36
A
回答
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进行接口。调用
所以,任何你想要的方式,第一种是最简单的,但我也不太清楚要如何使用它,或者你是否要选择文件或东西
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进入流星收藏。
我结束了使用第一个解决方案,因为它是最简单的。我将该文件添加到/ server,以便它不会在客户端上加载。谢谢 – Alex 2013-03-14 00:01:35
嗨Akshat 我试过你的代码,但我得到“ReferenceError:__meteor_bootstrap没有定义”。我的json文件与js文件位于同一个文件夹中。 – 2013-04-02 11:28:50
这是客户端代码吗?以上仅适用于'if(Meteor.isServer){..}'块或任何服务器端js运行的位置,例如'/ server'文件夹中。 npm模块不能包含在客户端中,所以您可以通过http调用 – Akshat 2013-04-02 11:30:42