我在Nuxt的Axios中使用asyncData
从一个API获得 meta标记,但我的问题是元描述必须设置为服务器端才能出现在代码中。
所以我添加了以下我的nuxt页:
asyncData(context) {
return context.$axios
.get('/api/house', {
headers: {
'X-AUTH-TOKEN': '######',
'Content-Type': 'application/json',
},
})
.then((res) => {
return { fetchedData: res.data.page.meta }
})
},
起初, meta描述在代码中,但如果我刷新浏览器,我会丢失我的令牌。
我尝试将其添加到nuxt.config.js中,并使用以下代码:
axios: {
headers: {
common: {
'X-AUTH-TOKEN': '###################',
'Content-Type': 'application/json',
},
},
},
我想每个axios GET
请求都会有令牌服务器端而不会丢失,但这不起作用,所以我试着设置一个axios拦截器,生成一个axios.js
并将其添加到nuxt.config.js中:
plugins: [
{ src: '~/plugins/axios.js' },
]
我的axios.js:
import axios from 'axios'
const AUTH_TOKEN = '#######################'
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN
axios.defaults.headers.post['Content-Type'] = 'application/json'
但是每次刷新Nuxt页面时,结果仍然是一样的,令牌消失了,因为我使用了asyncData
,页面没有呈现。
如何使用asyncData
设置我的 meta描述,并将我的令牌添加到每个GET
请求,即使我刷新了浏览器?
*编辑
下面是我如何使我的客户端请求在我的nuxt页面的 meta标记:
<script>
export default {
layout: 'house',
asyncData(context) {
return context.$axios
.get('/api/house', {
headers: {
'X-AUTH-TOKEN': '### TOKEN HARDCODED ###',
'Content-Type': 'application/json',
},
})
.then((res) => {
return { fetchedData: res.data.page.meta }
})
},
data() {
return {
route: 'house',
fetchedData: [],
}
},
head() {
return {
title: this.fetchedData.title,
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: this.fetchedData.description },
],
}
},
}
</script>
1条答案
按热度按时间lvmkulzt1#
好了,下面是一个代码框,它向您展示了一个测试伪API的工作示例:https://codesandbox.io/s/so-async-data-nuxt-axios-get-f4y3v?file=/pages/index.vue
这是真正有趣的代码
当然,您可以对
secureToken
进行硬编码,但在这里,我向您展示了如何使用env变量。这是
nuxt.config.js
文件的一部分你应该把一个
.env
文件。当然,它需要被列入
.gitignore
的黑名单(默认行为)。我提交它是为了示例目的,不要公开它。在您的服务器上使用env变量!:)一旦这是工作,你可以看看一些axios全局配置。让我知道如果这一个工作正常,然后再继续。