問題

Express上のGraphQLサーバへと、curlでqueryを発行した。

$ curl -XPOST -H "Content-Type:application/graphql"  
'http://localhost:5000/api/graphql'  
-d 'query Query { user(_id: 3) { name, mail } }'

すると、以下のようなレスポンスが。

{
  "errors": [
    {
      "message": "Must provide query string."
    }
  ]
}

むむ。

対処法

その1

Expressの立ち上げスクリプトに追記する。

// ./server.js
const express = require(express)
const app = express()
const bodyParser = require(body-parser)

app.use(bodyParser.urlencoded({ extended: false }))
// ↓この行を新規追加
app.use(bodyParser.text({ type: application/graphql }))
app.use(bodyParser.json())

POSTリクエストのbodyをテキストとして解析してくれる。

その2

リクエストの中身をjsonにする。キーをquery(あるいはmutation)として、値に発行したいクエリを設定する。

$ curl -XPOST -H "Content-Type:application/json" 
'http://localhost:5000/api/graphql' 
-d ' { "query":  "Query { user(_id: 3) { name, mail } } " } '