首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinatra + Angularjs路由

Sinatra + Angularjs路由
EN

Stack Overflow用户
提问于 2013-07-08 06:00:57
回答 2查看 748关注 0票数 3

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

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

有没有办法通过从Sinatra到Angular的路由?

目前,Sinatra所做的一切就是加载index.html

代码语言:javascript
复制
get '/' do
  File.read "#{Dir.pwd}/app/index.html"
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-08 16:47:19

感谢@Ryan,我最终实现了一个有效的解决方案。

代码语言:javascript
复制
get '/*' do
  File.read "#{Dir.pwd}/app/index.html"
end
票数 3
EN

Stack Overflow用户

发布于 2013-07-08 13:59:04

可以这样做的一种方法是使用Sinatra设置一个通用路由,将请求传递给您的angular应用程序。我对sinatra框架不是很熟悉,但是对于flask,你是这样做的:

代码语言:javascript
复制
@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中,就是这样做的。

代码语言:javascript
复制
@app.route('/')
@app.route('/about')
def index(path):
    return make_response(open('templates/index.html').read())

在sinatra,我认为应该是这样的:

代码语言:javascript
复制
get '/' do
get '/about' do
    File.read "#{Dir.pwd}/app/index.html"
end

编辑:这真的取决于你要做什么。一些网站希望他们的整个网站是一个角度应用(而不是优先搜索引擎优化,适当的404,等等)而其他人则希望为他们的angular应用程序保留一个特定的部分。例如,您可能会看到"/app/OTHER_STUFF“。在这种情况下,catch all可以很好地工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17516827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档