西纳特拉+;Angularjs路由

西纳特拉+;Angularjs路由,angularjs,sinatra,Angularjs,Sinatra,我有一个Angularjs应用程序在Sinatra上运行 如果我点击应用程序中的一个链接,我的角度路由是有效的,但是如果我直接访问url,我会从Sinatra得到404 有没有办法从西纳特拉到安格尔的路线 目前,Sinatra所做的只是加载index.html get '/' do File.read "#{Dir.pwd}/app/index.html" end 一种方法是使用Sinatra设置一条全覆盖路线,将请求传递给angular应用程序。我对sinatra框架不是很熟悉,但对于f

我有一个Angularjs应用程序在Sinatra上运行

如果我点击应用程序中的一个链接,我的角度路由是有效的,但是如果我直接访问url,我会从Sinatra得到404

有没有办法从西纳特拉到安格尔的路线

目前,Sinatra所做的只是加载index.html

get '/' do
  File.read "#{Dir.pwd}/app/index.html"
end

一种方法是使用Sinatra设置一条全覆盖路线,将请求传递给angular应用程序。我对sinatra框架不是很熟悉,但对于flask来说,这就是您的工作方式:

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def index(path):
    return make_response(open('templates/index.html').read())
在西纳特拉,我想应该是这样的:

get '/' do
get '/about' do
    File.read "#{Dir.pwd}/app/index.html"
end

编辑:这真的取决于你想要什么。一些网站希望他们的整个网站是一个angular应用程序(并且不优先考虑SEO、适当的404等),而其他网站希望为他们的angular应用程序保留一个特定的部分。例如,您可能会看到“/应用程序/其他内容”。在这种情况下,一个全面的解决方案会很有效。

多亏了@Ryan,我最终实现了一个有效的解决方案

get '/*' do
  File.read "#{Dir.pwd}/app/index.html"
end
get '/*' do
  File.read "#{Dir.pwd}/app/index.html"
end