【发布时间】:2013-02-28 17:22:24
【问题描述】:
我有一个要加载的 data.json 文件,我已将它放在 lib/ 文件夹中。我应该怎么做才能将该 JSON 加载到服务器中的变量中? 谢谢
【问题讨论】:
标签: meteor
我有一个要加载的 data.json 文件,我已将它放在 lib/ 文件夹中。我应该怎么做才能将该 JSON 加载到服务器中的变量中? 谢谢
【问题讨论】:
标签: meteor
您可以通过三种方式来解决此问题,这取决于您最熟悉的方式和您的用例。
首先是存储为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 接口
所以无论你想要哪种方式,第一种都是最简单的,但我不太确定你想如何使用它,或者你是否想选择文件或其他方式
【讨论】:
if(Meteor.isServer) {..} 块或运行服务器端js 的任何地方,例如/server 文件夹。 npm 模块不能包含在客户端中,因此您可以使用 http 调用获取它
__meteor_bootstrap__ 而不是 __meteor_bootstrap
由于我对这一切都不熟悉,我怀疑这不是 正确的 方法,但是这对我有用......
三个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 文件(在我的情况下,我将其存储在测试目录中)并将其插入到文档集合中的字段中。
我很想听听其他人应该如何正确地做到这一点。
【讨论】:
我假设您希望将 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 保存到流星集合中。
【讨论】: