コンパイラかく語りき

import { Fun } from 'programming'

curlに対して、Express上のGraphQLサーバが Must provide query string. を返す

問題

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 } } " } '