需求

通过配置withCredentials属性,xhr对象如果将该属性设置为true,在跨域请求时,会带上本域名和请求域名下的cookie。

添加属性

  1. export interface AxiosRequestConfig {
  2. // ...
  3. withCredentials?: boolean
  4. }
  1. if (responseType) {
  2. request.responseType = responseType
  3. }

demo

新增server2

const express = require('express')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')

const app = express()

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cookieParser())

const router = express.Router()

const cors = {
  'Access-Control-Allow-Origin': 'http://localhost:3000',
  'Access-Control-Allow-Credentials': true,
  'Access-Control-Allow-Methods': 'POST, GET, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type'
}

router.post('/more/server2', function(req, res) {
  res.set(cors)
  res.json(req.cookies)
})

router.options('/more/server2', function(req, res) {
  res.set(cors)
  res.end()
})

app.use(router)

const port = 8088
module.exports = app.listen(port)

发送请求

import axios, {AxiosError} from '../../src/index'
document.cookie = 'cookie-key=1000'
axios({
  url: '/more/get',
  method: 'get',
}).then(res => {
  console.log(res)
}).catch((err: AxiosError) => {
  console.log(err)
})

axios({
  url: 'http://localhost:8088/more/server2',
  method: 'post',
  withCredentials: true
}).then(res => {
  console.log(res)
}).catch((err: AxiosError) => {
  console.log(err)
})