Códigos para forçar o frontend a se atualizar automáticamente quando uma nova versão está disponível.
- Frontend feito com AngularJS e backend feito com Laravel
- Frontend e backend que compartilham o mesmo nome de versão
- Procedimento externo que atualize o nome da versão atual
.env
APP_VERISON=1.0.0
.
.
.
\App\Http\Middleware\AppVersionHeader.php
<?php
namespace App\Http\Middleware;
class AppVersionHeader
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, \Closure $next)
{
$response = $next($request);
$response->headers->set('X-App-Version', env('APP_VERSION'));
return $response;
}
}
\App\Http\Kernel.php
protected $middleware = [
.
.
.
\App\Http\Middleware\AppVersionHeader::class,
];
App Version Interceptor
(function () {
'use strict';
angular.module('shared').factory('AppVersionInterceptor', AppVersionInterceptor);
AppVersionInterceptor.$inject = ['$q', 'LocalStorage', '$state'];
function AppVersionInterceptor($q, LocalStorage, $state) {
var pattern = new RegExp('viacep');
return {
'response': function (response) {
var server_version = response.headers('X-App-Version');
if (server_version !== null) {
var local_version = LocalStorage.get('local_version');
if (local_version !== server_version) {
LocalStorage.set('local_version', server_version);
if (local_version !== null) {
window.location.reload(true);
}
}
}
return response;
}
};
}
})();
App Config
angular.module('app').config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('AppVersionInterceptor');
.
.
.
}])