Rails是否可以防止通过javascript读取本地json文件?

时间:2018-04-09 20:29:24

标签: ruby-on-rails

我尝试使用此代码使用javascript读取json文件:

$.getJSON("app/helpers/data.json", function (data) {
    $.each(data, function (index, value) {
       console.log(value);
    });
});

但我从浏览器中得到的是:

  

获取http://localhost:3001/app/helpers/data.json 404(未找到)

他们总是理解使用 url路径而不是代码文件夹中的文件路径进行搜索

当我尝试读取控制器时,我收到了正确的数据:

@file = JSON.parse(File.read('app/helpers/data.json'))

{"list"=>[{"label"=>"lbl1", "category"=>"cat1", "desc"=>"desc1"}, {"label"=>"lbl2", "category"=>"cat1", "desc"=>"desc2"}, {"label"=>"lbl3", "category"=>"cat1"}]}

不是那么好的解决方案:

我可以在js文件中显示这个json的唯一方法是在控制器中分配变量并将此变量发送到带有gem gon的js文件

在头部application.html.erb:

之上
<%= include_gon %>

控制器动作:

gon.json_data = JSON.parse(File.read('json path'))

js file:

console.log(gon.json_data);

Obs 1:这种使用gem gon的方法使得app 更慢当你必须在rails中读取数千条记录的数据库时(5.5k并且每次加载花费500ms!)< / p>

Obs 2:当你使用javascript访问本地文件时,我想象安全问题,但似乎我是世界上唯一一个有这个&#34;问题的人#34; ?

1 个答案:

答案 0 :(得分:1)

如果您想阅读.json并将其提供给网络服务器,并因此提供给客户端,则应将其放在public/ - 文件夹中。除非另有路由,否则app/helpers文件夹通常不可供客户端使用。

然后从控制器中进行操作

@file = JSON.parse(File.read('public/helpers/data.json'))

然后,您将在浏览器中以

的身份访问它
$.getJSON("helpers/data.json", function (data) {
    $.each(data, function (index, value) {
       console.log(value);
    });
});