Nuxt:如何从 express 获取会话值

Nuxt : How to get the session values from express

我试图通过 this.$session.userid 从 Nuxt 中的快速会话 (req.session.userid) 获取值,但我无法在 console.log.

中获取值

它只是显示“无法读取未定义的属性(读取 'userid')”

如果我得到 this.$session 的值,它就会显示 'undefined'

如果我想通过session正常获取value,那么需要怎么调用value呢?还是不能通过session取值?

/nuxt.config.js

export default{
  components: true,
  buildModules: [
    '@nuxtjs/dotenv'
  ],
  modules: [
    '@nuxtjs/dotenv', 'cookie-universal-nuxt',
  ],
  router: {
    middleware: ['auth']
  },
  serverMiddleware: [
    '~/server/app.js',
  ],
}

/server/app.js

const express = require('express')
const app = express()
const session = require('express-session')
const cors = require('cors')

app.use(cors())
//body-parser added
app.use(express.json())
//session added
app.use(session({
  secret: 'secret key',
  resave: false,
  saveUninitialized: true
 }))

...

app.use('/login_router', require('./routes/login_router'))

/server/routes/login_router.js

const express = require('express');
const router = express.Router();

const path = require('path');

router.get('/testGetUserid', function(req, res){
  req.session.userid = '10101'
  console.log('req.session.userid>>>>>>', req.session.userid)
  res.redirect('/login')
});

/pages/login.vue

<template>
    <button @click="submitTest">Get the userid</button>
</template>

<script>
export default {
    methods:{
        submitTest(){
            console.log('this.$session.userid>>>', this.$session.userid) // I want to see this value as 10101
        }
    }
}
</script>

我假设您使用的是 SPA 模式。

因此您可以使用 API 来获取该用户 ID。

router.get('/testGetUserid', function(req, res){
  req.session.userid = '10101'
  
  res.json({ userId: req.session.userid })
});

如果你想在另一个端点得到userId,我想你可以这样做。我还没有尝试过,但我相信一旦你在 /testGetUserid.

中设置它,会话就可以在你的后端代码中的任何地方访问。

例如你有 /user 路线

router.get('/user', function(req, res){
  const userId = req.session.userid
  
  // do something
  
  res.json(someJSON)
});

在 Nuxt

<script>
export default {
    methods:{
        submitTest(){
          axios.get('/testGetUserid', { withCredentials: true }).then(res => {
            // here you can get the userId, you can store it in variable or vuex
            conosle.log(res.data.userId)
          })
        }
    }
}
</script>