Vuejs2 nuxtjs-全局共享可编辑服务器变量

Vuejs2 nuxtjs-全局共享可编辑服务器变量,vuejs2,nuxt.js,Vuejs2,Nuxt.js,我使用的是nuxtjs,我使用的是针对restful API的应用程序身份验证。我想将我的令牌存储在服务器端变量中,我在任何地方都使用该令牌向API请求信息,但我无法将其存储在process.env variabls中,因为我需要在其过期时(1小时后)对其进行修改。令牌用于应用程序,而不是用户,因此对api的每次调用都必须使用相同的令牌。我尝试使用fs将我的令牌保存在json文件中,并在到期时刷新它,但我不能在nuxtjs中使用fs,它告诉我fs不存在,可能是因为我尝试在客户端使用它。 你知道我

我使用的是nuxtjs,我使用的是针对restful API的应用程序身份验证。我想将我的令牌存储在服务器端变量中,我在任何地方都使用该令牌向API请求信息,但我无法将其存储在process.env variabls中,因为我需要在其过期时(1小时后)对其进行修改。令牌用于应用程序,而不是用户,因此对api的每次调用都必须使用相同的令牌。我尝试使用fs将我的令牌保存在json文件中,并在到期时刷新它,但我不能在nuxtjs中使用fs,它告诉我fs不存在,可能是因为我尝试在客户端使用它。 你知道我怎么做吗?
谢谢

我在服务器端环境中使用express解决了这个问题,我不得不将服务器中间件配置放在nuxt.config.js中:

const bodyParser = require('body-parser')
const session = require('express-session')

module.exports = {    
...
  serverMiddleware: [
    bodyParser.json(),
    session({
      secret: 'my-secret',
      resave: false,
      saveUninitialized: false,
      cookie: { maxAge: 3600000 }
    }),
    '~/server'
  ],
...
在/server/index.js文件中:

const express = require('express')
const api = require('./api')

// Create express router
const router = express.Router()

// Transform req & res to have the same API as express
// So we can use res.status() & res.json()
var app = express()
router.use((req, res, next) => {
  Object.setPrototypeOf(req, app.request)
  Object.setPrototypeOf(res, app.response)
  req.res = res
  res.req = req
  next()
})

router.get('/myroute', (req, res) => {
  api.get('myroute')
    .then((data) => {
      res.json({success: true})
    })
    .catch((e) => {
      res.status(500).json({ message: 'An error occurred' })
    })
})

module.exports = {
  path: '/server',
  handler: router
}
在我的/server/api.js文件中

const parameters = require('./parameters.js')
const router = require('./router.js')
const axios = require('axios')

const auth = {
  accessToken: null,
  expiresAt: null
}

const getToken = () => {
  const expiresAt = auth.expiresAt
  const accessToken = auth.accessToken

  const expires = expiresAt ? (new Date()).getTime() : null

  if (expires && expires - expiresAt > 0) {
    return new Promise((resolve, reject) => {
      resolve(accessToken)
    })
  }

  return new Promise((resolve, reject) => {
    axios.get(parameters.api + router.token, {
      params: parameters.auth
    })
      .then(({data}) => {
        auth.accessToken = data.access_token
        auth.expiresAt = (new Date()).getTime() + data.expires_in - 60
        resolve(data.access_token)
      })
      .catch((e) => {
        reject(e)
      })
  })
}

const getCompleteRoute = (route) => {
  return new Promise((resolve, reject) => {
    getToken()
      .then((token) => {
        resolve(parameters.api + router[route] + '?access_token=' + token)
      })
      .catch((e) => {
        reject(e)
      })
  })
}

const get = (route, params) => {
  return new Promise((resolve, reject) => {
    getCompleteRoute(route)
      .then((completeRoute) => {
        axios.get(completeRoute, {params: params})
          .then(({data}) => {
            resolve(data)
          })
          .catch((e) => {
            reject(e)
          })
      })
      .catch((e) => {
        reject(e)
      })
  })
}

const post = (route, params) => {
  return new Promise((resolve, reject) => {
    getCompleteRoute(route)
      .then((completeRoute) => {
        axios.post(completeRoute, params)
          .then(({data}) => {
            resolve(data)
          })
          .catch((e) => {
            reject(e)
          })
      })
      .catch((e) => {
        reject(e)
      })
  })
}

module.exports = {
  get: get,
  post: post
}