2017-07-21 7 views
0

VueRouterのドキュメントによれば、meta fieldsを追加し、それらの値に基づいてルートをグローバルに制限することができます。VueRouterとメタフィールド

概説されているような実装をしようとした後、私はエラーを取得する:

ReferenceError: record is not defined (line 46) 

この行に対応する:

:ここ

if (!hasCookies(record.meta.cookies)) { 

は、ルータガードのロジックを持っているファイルであります

import Vue from 'vue'; 
import VueRouter from 'vue-router'; 

Vue.use(VueRouter); 

const routes = [ 
    { 
    path : '/authenticate/:id', 
    component : require ('./components/authenticate.vue'), 
    redirect: '/here', 
    }, 

    // can only get here if the passcode has been filled out 
    { 
    path : '/client/create', 
    component : require('./components/createClientForm.vue'), 
    meta : { 
     cookies: ['passcode_cookie'], // need passcode to be able to create the client 
     redirect: '/authenticate/1' // dummy value here for now 
    } 
    }, 

    // can only get here if passcode and client form have been completed 
    { 
    path : '/test/:id', 
    component : require('./components/runTest.vue'), 
    meta : { 
     cookies : ['passcode_cookie', 'client_cookie'], 
     redirect : '/client/create' 
    } 
    } 
]; 

const router = new VueRouter ({ 
    routes, 
    mode: 'history', 
}); 

    function hasCookies (cookies) { 
    return cookies.every(cookie => document.cookie.indexOf(cookie) !== -1); 
    } 

    router.beforeEach((to, from, next) => { 
     if (to.matched.some(record => record.meta.cookies)) { 
     // this route requires cookies, check if cookies exist 
     if (!hasCookies(record.meta.cookies)) { 
     next({ 
      path : record.meta.redirect || '/', 
     }) 
     } else { 
     next(); 
     } 
    } else { 
     next(); // make sure to always call next()! 
    } 
    }); 

const app = new Vue ({ 
    router 
}).$mount('#app'); 

私は何が間違っている可能性がありますか?

答えて

2

エラーはここでは自明です。変数recordはスコープ内にはありません。関数のパラメータではなく、グローバル変数ではありません。 recordは、someに渡したコールバック関数内でのみ定義されます。エラーが発生した時点で範囲外です。

代わりにこれを試してみてください:

const record = to.matched.find(record => record.meta.cookies && !hasCookies(record.meta.cookies)); 
if (record) { 
    next({ path: record.meta.redirect || '/' }); 
} else { 
    next(); 
} 
関連する問題