关闭Ember应用程序进行维护的最简单方法

k0pti3hp  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(187)

我有一个Ember.js应用程序正在从S3服务,使用ember-cli-deploy上传。它有一个Rails后端,我不时地拿下来维护。在这段时间里,我希望我的ember应用程序将每个路由重定向到一个“正在维护”的页面。
我可以在Ember框架中完成这一操作吗?或者我最好用一个静态文件临时替换S3上的index.html?

0lvr5msh

0lvr5msh1#

最简单的方法就是你建议的方法(替换索引)。2但是,我给你另一个场景,如果你喜欢的话,你可以这样做,但是它需要一些时间来实现。

使用beforeModel()

我不确定你是否使用了什么来进行身份验证和授权,但是,这可以帮助你。例如,你可以只获得需要通过令牌验证的会话(在我的情况下是从服务器),如果它是无效的,我会将每个人重定向到一个单独的页面,现在登录,但你可以将其更改为UC。

// route/login.js // this can be in other page as well
import Ember from 'ember';

export default Ember.Route.extend({
  session: Ember.inject.service(),
  beforeModel() {
    if(this.get('session.isAuthenticated')) {
      this.transitionTo('index');  // as you can see if session is authenticated I will redirect it to index but if not all pages will remain in the same page which is login. 
    }
  }
});

因此在application.js中,您可以轻松地

this.get('session')

然后您可以对其进行授权。如果可以,您可以将用户重定向到适当页面,但如果不可以,您可能希望将其重定向到其他位置。
请记住,如果要使会话无效,可以轻松使用

session.invalidate();

简而言之,你可以很容易地让你的令牌API或任何你从服务器发送到你的Ember应用程序无法访问,所以Ember无法解决它将重定向到另一个页面。
我希望我能适当地解释一下,你明白我的意思。

pbwdgjma

pbwdgjma2#

你可以在你的Ember应用程序中实现一点点的工作。
如果你的API服务器返回了一个可识别的状态,比如503代码,你可以使用一个规则让你的API调用使用route actions重定向到你的maintenance route,或者使用已经加载的内容。这允许你的Ember应用程序提供静态或缓存数据的页面,以保持无缝浏览,改善用户体验。当然,这如果停机时间很短(几秒钟),则可以使用。
SEO方面,如果你也想让内容暂时对蜘蛛不可用,你可能需要在你的网络服务器上设置一个自定义规则(nginx,apache...)。

rks48beu

rks48beu3#

创建一个重新打开Ember.Route的初始化器,并在beforeModel钩子中转换到'down for maintenance'路由(在调用super之前):

import Ember from 'ember';

var initialize = function(/* container, app */) {
Ember.Route.reopen({
    beforeModel: function() {
        this.transitionTo('down-for-maintenance');
        this._super();
      }
  });
};

export default {
  name: 'maintenance-redirect',
  initialize: initialize
};

完成后删除它。

相关问题