我在Sinatra上运行了一个Angularjs应用程序。
如果我点击应用程序中的一个链接,我的Angular路由是有效的,但是如果我直接访问url,我会得到Sinatra的404。
有没有办法通过从Sinatra到Angular的路由?
目前,Sinatra所做的一切就是加载index.html
get '/' do
File.read "#{Dir.pwd}/app/index.html"
end发布于 2013-07-08 16:47:19
感谢@Ryan,我最终实现了一个有效的解决方案。
get '/*' do
File.read "#{Dir.pwd}/app/index.html"
end发布于 2013-07-08 13:59:04
可以这样做的一种方法是使用Sinatra设置一个通用路由,将请求传递给您的angular应用程序。我对sinatra框架不是很熟悉,但是对于flask,你是这样做的:
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def index(path):
return make_response(open('templates/index.html').read())只要找到Sinatra的等价物,就可以运行了。
编辑:我意识到设置一个全面的路线可能不是最好的主意,特别是如果你正在构建一个网站(使用"$locationProvider.html5Mode(true)“与构建一个单页面的webapp),对于这种情况,返回适当的404对于搜索引擎索引等很重要。
相反,我会为你的Angular应用程序中的每条路由注册一条flask路由。在flask中,就是这样做的。
@app.route('/')
@app.route('/about')
def index(path):
return make_response(open('templates/index.html').read())在sinatra,我认为应该是这样的:
get '/' do
get '/about' do
File.read "#{Dir.pwd}/app/index.html"
end编辑:这真的取决于你要做什么。一些网站希望他们的整个网站是一个角度应用(而不是优先搜索引擎优化,适当的404,等等)而其他人则希望为他们的angular应用程序保留一个特定的部分。例如,您可能会看到"/app/OTHER_STUFF“。在这种情况下,catch all可以很好地工作。
https://stackoverflow.com/questions/17516827
复制相似问题