使用sinatra渲染目录内容

时间:2015-09-24 19:41:48

标签: ruby sinatra

我想通过sinatra的路由dsl

呈现目录的内容

在我的浏览器中,我可以像这样访问文件夹:

file:///Users/lfender/source/onesearch/public/bower_components/swagger-ui/dist/

enter image description here

使用sinatra路由,我想指向这个静态目录的路由:

get '/api-docs/' do
  root = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist')
  File.read(File.expand_path(root))
end

上述路由将失败Is a directory @ io_fread,因为我传入的是目录而不是文件。

如何通过sinatra路径读取静态目录的内容,以便我可以使用/api-docs/在公共目录中提供文件? sinatra有可能吗?

2 个答案:

答案 0 :(得分:2)

http://www.sinatrarb.com/intro.html上搜索splat

get '/api-docs/*' do |sub_path|
  path = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist', sub_path)
  File.read(File.expand_path(path))
end

答案 1 :(得分:0)

想出来 - 你可以通过接受文件路径作为参数来为sinatra dsl提供静态资产:

  get '/api-docs/:path_1/:path_2' do
    path = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist', params[:path_1], params[:path_2])
    File.read(File.expand_path(path))
  end

  get '/api-docs/:path' do
    path = File.join(settings.public_folder, 'bower_components', 'swagger-ui', 'dist', params[:path])
    File.read(File.expand_path(path))
  end

请注意,您可能需要将相应的mime /内容类型设置为响应