var routes = []; const router = new VueRouter(); router.beforeEach((to, from, next) => { if (to.path !== '/pages/login.html') { var isAuthenticated = false; if (store.state.token.accessToken) { var jwt = jwt_decode(store.state.token.accessToken); isAuthenticated = jwt.exp * 1000 >= new Date().getTime(); } if (!isAuthenticated) { router.push('/pages/login.html'); return; } } var url = to.path === '/' ? '/pages/home.html' : to.path; var name = url.replace(/\//g, "-").replace(/\./g, "-").substring(1); var route = routes[name]; if (!route) { axios.get(url).then(function (response) { var model = parseModel(response); route = { name: name, path: to.path, component: model, meta: model.meta }; route.meta.path = to.path; router.addRoutes([route]); routes[name] = route; router.push(to.path); }); } else { next(); } });