RequestJar 本质是包了一层的 CookieJar

const { CookieJar } = require('tough-cookie')
const request = require('request')
const fs = require('fs')

const jar = request.jar()
console.log(jar)
// RequestJar {
//   _jar: CookieJar { enableLooseMode: true, store: { idx: {} } }
// }

request({
  uri: 'https://bilibili.com',
  method: 'GET',
  jar
}, () => {
  console.log(jar)
  // RequestJar {
  //   _jar: CookieJar {
  //     enableLooseMode: true,
  //     store: { idx: {
  //       'www.bilibili.com': {
  //         '/': {
  //           main_confirmation: Cookie="main_confirmation=frxWt59Zmjo3+iQYGP6iYOCJkXro/3BgRTYlWCvsDNc=; Expires=Mon, 24 Aug 2020 20:14:19 GMT; Path=/; HttpOnly; hostOnly=true; aAge=464ms; cAge=466ms"
  //         }
  //       }
  //     } }
  //   }
  // }

  // 保存
  fs.writeFileSync('cookie.json', stringifyRequestJar(jar))
  // 读取
  const newJar = parseRequestJar(fs.readFileSync('cookie.json').toString())
  console.log(newJar)
})

function stringifyRequestJar (jar) {
  const serializedObj = jar._jar.serializeSync()
  const jsonStr = JSON.stringify(serializedObj)
  return jsonStr
}

function parseRequestJar (serialized) {
  const _jar = CookieJar.deserializeSync(serialized)
  const jar = request.jar()
  jar._jar = _jar
  return jar
}