我有一个要加载的 data.json 文件,并且已放在 lib/ 文件夹中。我应该怎么做才能将该 JSON 加载到服务器中的变量中?谢谢
3 回答
您可以通过三种方式来解决此问题,这取决于您最熟悉的方式和您的用例。
第一种是将其存储为 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.json
在private
项目根目录中的目录中:
var myjson = {};
myjson = JSON.parse(Assets.getText("myfile.json"));
如果您想在客户端访问它,则必须将其与 Meteor.methods 和 Meteor.call 接口
所以无论你想要哪种方式,第一种是最简单的,但我不太确定你想如何使用它或者你是否想选择文件或其他东西
由于我对这一切都不熟悉,我怀疑这不是正确的方法,但这对我有用......
三个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 文件(在我的情况下,我将其存储在测试目录中)插入到文档集合中的一个字段中。
我很想听听其他人应该如何正确地做到这一点。
我假设您希望将 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 保存到流星集合中。