为什么我无法从带有axios的graphql收到可用的响应?

时间:2019-06-04 14:36:33

标签: node.js graphql axios

我已成功通过服务器进行身份验证,发送了我的graphql请求并收到了响应。但是,答案并不完全正确。

这只是一个简单的nodejs,axios,graphql情况。我可以通过邮递员或curl来获得正确的安息,但不能通过node获得。我也尝试获取,但没有成功。难道我做错了什么?这是针对producthunt api的,api浏览器位于here

require('dotenv').config()
const axios = require("axios");
const PH_KEY = process.env.PH_KEY;
const PH_SECRET = process.env.PH_SECRET;
const BASE_URL = process.env.BASE_URL;
const AUTH_URL = process.env.AUTH_URL;
const GRAPHQL_URL = process.env.GRAPHQL_URL;
const PH = axios.create({
  baseURL: BASE_URL,
  responseType: 'json',
  headers: {
    // 'Accept': 'application/json, text/plain, gzip, deflate, */*',
    'Content-Type': 'application/json'
  },
})
let TOKEN = 'Bearer '

const getAuth = async () => {
  return await PH({
    url: AUTH_URL,
    method: "post",
    data: {
      client_id: `${PH_KEY}`,
      client_secret: `${PH_SECRET}`,
      grant_type: "client_credentials"
    }
  })
    .then((res) => {
      console.log('auth status ', res.status)
      return res.data.access_token
    })
    .then((res) => {
      TOKEN += res
      console.log(TOKEN)
    })
    .catch((err) => {
      console.log(err)
    })
  }

const getHunt = async () => {
  await getAuth()
  PH.defaults.headers.common['Authorization'] = TOKEN
  return await PH({
    url: GRAPHQL_URL,
    method: 'post',
    data:
    {
      query: `
            query posts {
  posts(order: RANKING, first: 1) {
    edges {
      node {
        name
        votesCount
        user {
          name
        }
        createdAt
      }
    }
  }
}
            `
    }
  })
  .then((res) => {return res})
    .then((res) => {
      console.log(res.data)
      return res.data
    })
    .catch((err) => {
      console.log(err)
    })
}
const Main = async () => {
  await getHunt()
}
Main()

这是我在节点中收到的输出:

[Running] node "/Users/fireinjun/Work/YAC/yac-ph-tophuntfunction/app.js"
auth status  200
Bearer #################################################
{ data: { posts: { edges: [Array] } } }

这就是我所期望的:

{
  "data": {
    "posts": {
      "edges": [
        {
          "node": {
            "name": "Trends by The Hustle",
            "votesCount": 125,
            "user": {
              "name": "Jack Smith"
            },
            "createdAt": "2019-06-04T07:01:00Z"
          }
        }
      ]
    }
  }
}

1 个答案:

答案 0 :(得分:0)

我错误地访问了数据!显然我需要查看res.data.data.posts.edges[0]