使用机架从ruby返回json

时间:2015-12-14 14:33:41

标签: ruby json rack

我仍然是服务器端脚本的新手,并尝试自己一点点ruby给我写小帮手并学习一些新东西。

我目前正在尝试编写一个小型ruby应用程序,它将特定文件夹中所有图像的json文件发送到我的页面,我可以使用它们在js中进一步处理它们。

我阅读了很多关于ruby和rails的介绍,并建议将机架视为服务器和应用程序之间的轻量级通信器。

虽然ruby部分工作正常,但我很难理解如何发送生成的JSON作为对未来ajax调用的反应(例如)。希望有人能给我一些提示或资料来寻求进一步的了解。谢谢!

require 'json'

class listImages
def call(env)
    imageDir = Dir.chdir("./img");
    files = Dir.glob("img*")

    n = 0
    tempHash = {}

    files.each do |i|
      tempHash["img#{n}"] = i
      n += 1
    end

   File.open("temp.json","w") do |f|
     f.write(tempHash.to_json)
   end

  [200,{"Content-Type" => "application/javascript"}, ["temp.json"]] 
   end
   puts "All done!"
end

run listImages.new


if $0 == __FILE__
  require 'rack'
  Rack::Handler::WEBrick.run MyApp.new
end

1 个答案:

答案 0 :(得分:3)

在发送之前,您不必将JSON保存到文件中。直接发送:

[200, {"Content-Type" => "application/json"}, [tempHash.to_json]]

使用当前代码,您只发送字符串"temp.json"

那就是说,你的其余代码看起来有点混乱/不符合Ruby编码标准:

  • 使用大写字母class ListImages开始您的类名,而不是class listImages
  • 使用下划线,而不是camelcase用于变量名称:image_dir,而不是imageDir
  • puts "All done!"语句在方法定义之外,并在加载类时提前调用。
  • 您定义了一个班级ListImages,但在代码的最后一行中,您引用的是MyApp