无法在axios响应中设置cookie

时间:2019-04-25 07:25:02

标签: javascript cookies axios nuxt.js

我正在使用Nuxt.js开发网站,我想调用API并将结果放在服务器端的Cookie中

我将在Nuxt.js中间件中完成这一部分。 但是我可以调用API,可以设置cookie,但是不能使用API​​响应来设置cookie。

调用API

import axios from 'axios'

export default ({ res, store }) => {
  if (process.server) {
    axios.get(process.env.tokenAPI)
      .then((response) => {
        const token = response.data.token
        // console.log(token) and the server console will log the result
      })
  }
}

设置Cookie

export default ({ res, store }) => {
    res.setHeader('Set-Cookie', [`token=123456`]) // It works!!

}

组合他们

import axios from 'axios'

export default ({ res, store }) => {
  if (process.server) {
    axios.get(process.env.token)
      .then((response) => {
        const token = response.data.token
        res.setHeader('Set-Cookie', [`token=${token}`]) 
      })
  }
}

使用此代码时未设置cookie,它应根据结果设置cookie

2 个答案:

答案 0 :(得分:0)

您可以试试吗:

import axios from 'axios'
export default ({ res, store }) => {
  if (process.server) {
    axios.get(process.env.token)
      .then((response) => {
        document.cookie = "token="+response.data.token+"; expires=Thu, 18 Dec 2019 12:00:00 UTC; path=/";
      })
  }
}

答案 1 :(得分:0)

这是因为中间件必须等待发送响应,直到您设置标头为止。

import axios from 'axios'

export default async ({ res, store }) => {
  if (process.server) {
    const response = await axios.get(process.env.token);
    const token = response.data.token;
    res.setHeader('Set-Cookie', [`token=${token}`]);
  }
}