【问题标题】:nuxtjs - global shared editable server variablesnuxtjs - 全局共享可编辑服务器变量
【发布时间】:2017-10-30 18:05:33
【问题描述】:

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

【问题讨论】:

    标签: vuejs2 nuxt.js


    【解决方案1】:

    我通过在服务器端环境中使用 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2019-01-15
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多