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