return json 来自 ruby 使用机架

return json from ruby using 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 [=13=] == __FILE__
  require 'rack'
  Rack::Handler::WEBrick.run MyApp.new
end

您不必先将 JSON 保存到文件中再发送。直接发送即可:

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

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

也就是说,您的其余代码看起来有点 messy/not 符合 Ruby 编码标准:

  • 您的 class 名称以大写开头:class ListImages,而不是 class listImages
  • 对变量名使用下划线,而不是驼峰式:image_dir,而不是 imageDir
  • puts "All done!" 语句在方法定义之外,将在加载 class 时提前调用。
  • 您定义了一个 class ListImages 但在代码的最后一行您引用了 MyApp.