我有一个data.json文件,我想加载并放在lib /文件夹中。为了将JSON加载到服务器中的变量,我该怎么办? 感谢
答案 0 :(得分: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.json
存储在项目根目录的private
目录中:
var myjson = {};
myjson = JSON.parse(Assets.getText("myfile.json"));
如果你想在客户端访问它,你必须将它与Meteor.methods和Meteor.call接口
无论你想要哪种方式,第一种方法都是最简单的,但我不太清楚你想如何使用它,或者你是否想要选择文件或其他东西
答案 1 :(得分: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文件(在我的情况下,我将它存储在tests目录中)到文档集合中的一个字段中。
我很想听听别人如何正确地做到这一点。
答案 2 :(得分: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留在流星收藏中。