2013-07-07 114 views
3

我有一個在Sinatra上運行的Angularjs應用程序。Sinatra + Angularjs路由

如果我點擊應用程序中的鏈接,我的Angular路線正在工作,但是如果我直接訪問網址,我會從Sinatra獲得404。

有沒有辦法從Sinatra傳遞給Angular?

目前,所有西納特拉正在做的是加載的index.html,你可以做到這將是建立一個包羅萬象的與西納特拉路線傳遞到您的角度應用要求

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

回答

3

感謝@Ryan我最終實施了一個工作解決方案。

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

的一種方式。我不是很熟悉的西納特拉框架,但對瓶,這是你怎麼做:

​​

只要找到了西納特拉相當於,你會好到哪裏去。


編輯:我意識到這可能不是建立一個包羅萬象的路線最好的主意,特別是如果你正在建設一個網站(使用「$ locationProvider.html5Mode(真)」與構建單頁webapp),爲此,返回正確的404對於搜索引擎索引等非常重要。

我會在Angular應用程序中爲每條路線註冊一個燒瓶路線。在燒瓶中,這是你如何做到的。

@app.route('/') 
@app.route('/about') 
def index(path): 
    return make_response(open('templates/index.html').read()) 

在末日,我想這將是這樣的:

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

編輯:這真的取決於你要什麼。有些網站希望他們的整個網站是一個角度的應用程序(並沒有優先考慮搜索引擎優化,適當的404等),其他人希望特定的部分保留爲他們的角度應用程序。例如,您可能會看到「/ app/OTHER_STUFF」。在這種情況下,一切都會很好。