我想通过sinatra的路由dsl
呈现目录的内容在我的浏览器中,我可以像这样访问文件夹:
file:///Users/lfender/source/onesearch/public/bower_components/swagger-ui/dist/
使用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有可能吗?
答案 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 /内容类型设置为响应