У меня есть Vue SPA, который обслуживается ASP Core API. Когда я запускаю его в режиме разработки, все работает отлично. Но как только я развертываю его в производственной среде (в службе приложений Azure), я всегда получаю пустую страницу.
Кажется, именно маршрутизатор не может сопоставить маршруты, насколько я могу поместите произвольное HTML в мое приложение. vue, и это будет отображаться.
Если я go в инструментах разработчика, я вижу, что index. html и все. js файлы скачиваются успешно, ошибок в консоли нет. Это верно независимо от того, какой URL я посещаю, например myapp.com и myapp.com/login, оба загружают все, но ничего не отображается на экране.
Я видел несколько сообщений, в которых предлагалось изменить режим маршрутизации на ha sh, но я все равно получаю тот же результат.
Пожалуйста, смотрите ниже мои файлы:
main.ts
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import vuetify from './plugins/vuetify';
import { LOGIN_INITIALISE } from './use-cases/user-auth/AuthModule';
Vue.config.productionTip = false;
store.dispatch(LOGIN_INITIALISE)
.then(() => {
new Vue({
router,
store,
vuetify,
render: (h) => h(App),
}).$mount('#app');
});
Приложение vue
<template>
<div>
<div>test</div>
<router-view></router-view>
</div>
</template>
<script lang="ts">
/* eslint-disable no-underscore-dangle */
import Vue from 'vue';
import Axios from 'axios';
import { LOGOUT } from './use-cases/user-auth/AuthModule';
import { LOGIN } from './router/route-names';
export default Vue.extend({
name: 'App',
created() {
// configure axios
Axios.defaults.baseURL = '/api';
Axios.interceptors.response.use(undefined, (err) => {
// log user out if token has expired
if (err.response.status === 401 && err.config && !err.config.__isRetryRequest) {
this.$store.dispatch(LOGOUT);
this.$router.push({ name: LOGIN });
}
throw err;
});
},
});
</script>
router / index.ts
import Vue from 'vue';
import {} from 'vuex';
import VueRouter, { RouteConfig } from 'vue-router';
import store from '@/store';
import {
HOME,
LOGIN,
SIGNUP,
USERS,
} from './route-names';
Vue.use(VueRouter);
const routes: Array<RouteConfig> = [
{
path: '/',
name: HOME,
component: () => import('@/views/Home.vue'),
},
{
path: '/login',
name: LOGIN,
component: () => import('@/views/Login.vue'),
},
{
path: '/signup',
name: SIGNUP,
component: () => import('@/views/SignUp.vue'),
},
{
path: '/users',
name: USERS,
component: () => import('@/views/Users.vue'),
beforeEnter: (to, from, next) => {
if (store.getters.userRole === 'Admin') {
next();
} else {
next({ name: HOME });
}
},
},
{
path: '*',
name: '404',
component: {
template: '<span>404 Not Found</span>',
},
},
];
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes,
});
router.beforeEach((to, from, next) => {
if (store.getters.isAuthenticated) {
next();
} else if (to.name === LOGIN || to.name === SIGNUP) {
next();
} else {
next({ name: LOGIN });
}
});
export default router;