graphql-request
を使っていた時に、実行してみたらHeaders
が無いためか下記のエラーが出ました。
Headers is not defined
原因
調べたところ Node.js には fetch API が無いため、Headers オブジェクトを扱うことができないようです。今回使っていたgraphql-request
では Headers を使用していたので、エラーとなっていました。
(graphql-request は Node.js にも対応している ような記載があったのですが、自分の使い方が間違っているのか何なのかよく分かりませんでした…)
解決策
fetch API を追加し、 Headers を使えるようにします。
node-fetch を追加
node-fetch
(https://www.npmjs.com/package/node-fetch)モジュールを追加します。
yarn add node-fetch
node-fetch をインポート
ファイルの上の行で import を書きます。今回は、graphql-request
の中で使っている Headers に対して適用させたいので、グローバル領域に定義します。
// global 領域に追加
import fetch from 'node-fetch';
global.Headers = fetch.Headers;
// Headers を使っているモジュールなど
import { gql, GraphQLClient } from 'graphql-request';
もし他のモジュール内でのエラーではなく自分のコード内のエラーなら、グローバル領域に定義せずに fetch.Headers
を直接使用するのが良いと思います。
Typescript(非推奨な方法)
自分の場合はたまたま Typescript で書いていたのですが、Headers が無いと怒られるので一回別の定数に格納し any 型として対応しました。Typescript はまだちゃんと理解できていないので、雑すぎる対応方法です。。
import fetch from 'node-fetch';
const nodeFetch: any = fetch;
global.Headers = nodeFetch.Headers;