сообщение об ошибке graphql получить полный http ответ - PullRequest
0 голосов
/ 25 февраля 2019

Я тестирую конечную точку Graphql с apollo-client.Когда происходит ошибка, HTTP-ответ выглядит следующим образом.

{
  "data": {
    "loginEmail": null
  },
  "errors": [
    {
      "message": "VALIDATION_FAILED",
      "locations": [
        {
          "line": 43,
          "column": 3
        }
      ],
      "path": [
        "loginEmail"
      ],
      "errors": [
        {
          "model": "user",
          "field": "password",
          "code": "INVALID",
          "extra": null
        }
      ]
    }
  ]
}

Вышеприведенное сообщение было перехвачено с помощью Chrome devtools.Но как поймать это полное сообщение об ошибке с помощью apollo-client?

Со следующими кодами все, что я получил, это GraphQL error: VALIDATION_FAILED

async function loginEmail(email, password) {
  // ...
  try {
    const res = await gqclient.mutate({ // gqclient comes from `new ApolloClient({...})`
      mutation,
      variables: { 
        "email": email,
        "password": password
      }
    })
    return res
  } catch (err) {
    logger.debug(err)   // all I got is `GraphQL error: VALIDATION_FAILED`
    return err
  }
}

Любые идеи?

Спасибо!


-------- Обновления --------

Спасибо @cgcgbcbc за напоминание!Моя winston конфигурация неверна.

Но я не знаю почему?

Это нормально (logger.info(err) может получить полное ответное сообщение):

const { createLogger, format, transports } = require('winston')

const logger = createLogger({
  level: 'debug',
  format: format.combine(
    format.timestamp({format: 'YYYY-MM-DDTHH:mm:ss'}),
    format.json()
  ),
  transports: [new transports.File({filename: 'logs/new_combined.log'})]
})

// output
// {
//    "graphQLErrors":[
//       {
//          "message":"VALIDATION_FAILED",
//          "locations":[
//             {
//                "line":2,
//                "column":3
//             }
//          ],
//          "path":[
//             "loginEmail"
//          ],
//          "errors":[
//             {
//                "model":"user",
//                "field":"password",
//                "code":"INVALID",
//                "extra":null
//             }
//          ]
//       }
//    ],
//    "networkError":null,
//    "message":"GraphQL error: VALIDATION_FAILED",
//    "level":"info",
//    "timestamp":"2019-02-26T15:26:19"
// }

Это не нормально:

const { createLogger, format, transports } = require('winston')

const logger = createLogger({
  level: 'debug',
  format: format.combine(
    format.timestamp({format: 'YYYY-MM-DDTHH:mm:ss'}),
    format.printf(info => {
      return JSON.stringify({
        timestamp: info.timestamp, 
        level: info.level, 
        message: info.message})
    })
  ),
  transports: [new transports.File({filename: 'logs/new_combined.log'})]
})

// output
// {
//    "timestamp":"2019-02-26T15:36:32",
//    "level":"info",
//    "message":"GraphQL error: VALIDATION_FAILED"
// }
...