2016-12-06 4 views
6

Я создаю приложение с NodeJS/Express для задней части и VueJS для Front с помощью Vue Cli и webpack.Vue Router Webpack Dot в Params

Я хотел бы знать, есть ли способ разрешить точку в параметрах для моих маршрутов.

Вот что я получаю, когда я стараюсь, не конфигой

Cannot GET /t/firstname.lastname

Вот мой /src/main.js

import Vue from 'vue' 
import App from './App.vue' 

import VueRouter from 'vue-router' 
import VueResource from 'vue-resource' 
import VueAutosize from 'vue-autosize' 

import Main from './components/Main.vue' 
import Signin from './components/Signin.vue' 

// We want to apply VueResource and VueRouter 
// to our Vue instance 
Vue.use(VueRouter) 
Vue.use(VueResource) 
Vue.use(VueAutosize) 

const router = new VueRouter({ 
    history: true 
}) 

// Pointing routes to the components they should use 
router.map({ 
    '/t/:person': { 
    component: Main 
    }, 
    '/signin': { 
    component: Signin 
    } 
}) 

router.beforeEach(function (transition) { 
    if (transition.to.path === '/signin' && window.localStorage.length !== 0) { 
    transition.redirect('/') 
    } else if (transition.to.path === '/' && window.localStorage.length === 0) { 
    transition.redirect('/signin') 
    } else { 
    transition.next() 
    } 
}) 

// Any invalid route will redirect to home 
router.redirect({ 
    '*': '/404' 
}) 

router.start(App, '#app') 
+1

Я считаю, что vue-router преобразует param в url в объект javascript, поэтому использование точки не допускается. Но я тестировал другие знаки препинания, и все в порядке. Вы можете использовать параметр regexp или optionnal, если хотите> [https://github.com/vuejs/vue-router/blob/9649929b3646954c7b59d149c570c3d0a96379c9/examples/route-matching/app.js](https://github.com/ vuejs/vue-router/blob/9649929b3646954c7b59d149c570c3d0a96379c9/examples/route-matching/app.js) –

+0

@utiiz Вы нашли решение? У меня такая же проблема. –

+0

Как это связано с Webpack? –

ответ

1

я имел дело с той же проблемой, даже я Возможно, кто-нибудь найдет полезное решение, которое я нашел.

Похоже, что проблема с webpack.

Если вы используете шаблон webpack vue-cli, вам необходимо настроить прокси-сервер для необходимых маршрутов. Например, в вашем случае вам нужно добавить это в файл config/index.js:

... 
dev: { 
    ... 
    proxyTable: { 
    '/t/*.*': { // this will match all urls with dots after '/t/' 
     target: 'http://localhost:8080/', // send to webpack dev server 
     router: function (req) { 
     req.url = 'index.html' // Send to vue app 
     } 
    } 
    // Any other routes you need to bypass should go here. 
    } 
    ... 
}, 
... 

Таким образом WebPack будет прокси все запросы к этому URL и не рассматривать их как файлы.