私はセットアップをしようとしています高速GraphQLサーバー。チュートリアルの後、次のようにサーバーの起動時に次のように入力します。GraphQLスキーマはインポートされません
// ENTIRE SCHEMA IN MAIN FILE THIS WORKS!!!
...
var graphql = require('graphql');
const RootQuery = new graphql.GraphQLObjectType({
name: 'RootQuery',
description: 'The root query',
fields: {
viewer: {
type: graphql.GraphQLString,
resolve() {
return 'viewer!';
}
}
}
});
const Schema = new graphql.GraphQLSchema({
query: RootQuery
});
app.use('/graphql', graphqlHTTP({ schema: Schema }));
...
データビューアを返します。しかし、私はメインのファイルのすべてを望んでいないとして、私は別のファイルにこの正確なコードを転送し、このようにそれをインポートしてみました:
//THIS DOES NOT WORK
...
var Schema = require('./build/models/graphql/schema');
app.use('/graphql', graphqlHTTP({ schema: Schema }));
...
私は次のエラーを取得:
{
"errors": [
{
"message": "Schema must be an instance of GraphQLSchema. Also ensure that there are not multiple versions of GraphQL installed in your node_modules directory."
}
]
}
をI私が間違っていることがわからない。これと関連がある場合は、es6で書いていて、ビルドスクリプトで5に戻しています。ここでは、スキーマファイルのビルドがあります:
// TRANSPILED SCHEMA
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var graphql = require('graphql');
var RootQuery = new graphql.GraphQLObjectType({
name: 'RootQuery',
description: 'The root query',
fields: {
viewer: {
type: graphql.GraphQLString,
resolve: function resolve() {
return 'viewer!';
}
}
}
});
var Schema = new graphql.GraphQLSchema({
query: RootQuery
});
exports.default = Schema;
そして、ここでは私のpackage.jsonです:
"express": "^4.13.4",
"express-graphql": "^0.5.3",
"graphql": "^0.6.0",
私は一つだけgraphqlがnode_modulesフォルダにあることを確認しました。 graphqlは、共有グローバルインスタンスのように、すべてのモジュールで同じINSTANCEを期待していますか? express-graphqlは独自のバージョンを使用していますか?どうすれば確認できますか?私はノードに新しいです、インスタンスをチェックする方法はありますか?
2番目のファイルは、トランスバーター出力の結果で、Babelのようです。最初のファイルもBabelを使っていますか? 1つのファイルでES6のインポート/エクスポート構文を使用していて、別のファイルでrequire()を直接使用しているということがあります。私はこの種の間違いを避けるために、1つの構文すべてを使うか、他のすべてを使うことをお勧めします。 –
ありがとうございました!あなたは正しいです、私はバベルのすべてではなく、私たちの生産環境から来たボイラープレートのコードだったメインファイルだけで、私はそれを残しました。一度私が先に進んでそれをes6で書き直し、それをすべて残して、すべてがうまくいった。このものは初心者のために追いつくのが難しいです。ヘルプをよろしく! – Coco