为什么中间件中的console.log()输出只有在直接输入页面时才能在服务器上看到?

时间:2018-04-02 13:08:47

标签: vue.js nuxt.js

我试图测试我是否只能在某些进程中输出中间件中的内容。但是,如果我使用以下代码 - process.server似乎总能工作 - 当我直接通过浏览器进入路线时。其他输出仅在我通过路由器更改路径时可见。我在通用模式下使用Nuxt。那里发生了什么?

实际上我想从本地存储用户数据中提供商店,然后在此页面受到保护时重定向用户。这只能从定义了localStorage的process.client完成。可以用中间件完成吗?还直接进入页面?

中间件/ test.vue

export default function (context) {
    if (process.server) {
        console.log('MIDDLEWARE SERVER')
    }
    if (!process.server) {
        console.log('MIDDLEWARE NON-SERVER')
    }
    if (process.client) {
        console.log('MIDDLEWARE CLIENT')
    }
    if (process.browser){
        console.log('MIDDLEWARE BROWSER')
    } 
}

页/ test.vue

<template>
  <h1>Some test Template</h1>
</template>

<script>
export default {
    middleware: ['test']
}
</script>

1 个答案:

答案 0 :(得分:0)

深入研究后,我找到了Nuxt团队成员的答案。显然,这是通用模式中的中间件的预期默认行为,仅在服务器上的页面刷新上运行。文件并不清楚。

在页面刷新方案中获取存储数据的唯一方法是使用这样的cookie。

//middleware/auth.js

export default function(context) {
  context.store.dispatch("initAuth", context.req)
}

然后:

//store/index.js

actions: {
    initAuth(vuexContext, req) {
     if(req) {
         if (!req.headers.cookie) {
            return
         } 
        // go get the cookie ;)
     }
  }
}