'How to solve the problem when running "hello.js" in GraphQL?

I am trying to use GraphQL for the first time today.
I refer to the tutorial at https://graphql.org/code/#javascript to run hello.js.
After following the tutorial, my program did not run successfully. Does anyone know a solution?
I create the environment as follow:

npm init
npm install graphql

then create hello.js at root directory and copy the official website tutorial:

var { graphql, buildSchema } = require('graphql');

var schema = buildSchema(`
  type Query {
    hello: String
  }
`);

var root = { hello: () => 'Hello world!' };

graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

Then I input node hello.js, here is the output:

(node:10308) UnhandledPromiseRejectionWarning: Error: Expected undefined to be a GraphQL schema.
    at assertSchema (E:\Node\np\node_modules\graphql\type\schema.js:35:11)
    at validateSchema (E:\Node\np\node_modules\graphql\type\validate.js:34:28)
    at graphqlImpl (E:\Node\np\node_modules\graphql\graphql.js:52:64)
    at E:\Node\np\node_modules\graphql\graphql.js:21:43
    at new Promise (<anonymous>)
    at graphql (E:\Node\np\node_modules\graphql\graphql.js:21:10)
    at Object.<anonymous> (E:\Node\np\hello.js:11:1)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)    at Module.load (internal/modules/cjs/loader.js:937:32)(Use `node --trace-warnings ...` to show where the warning was created)(node:10308) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:10308) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I want to know the reason why the use of graphql fails, and how to fix it, thanks.



Solution 1:[1]

For me and anyone else looking, looks like they changed things up a bit and not updated their docs...

graphql want one prop passed in not 3, and the naming on them is specific too, root should be rootValue.

the hello js should look like this...

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// The rootValue provides a resolver function for each API endpoint
var rootValue = {
  hello: () => {
    return 'Hello world!';
  },
};

// Run the GraphQL query '{ hello }' and print out the response
graphql({
  schema,
  source: '{ hello }',
  rootValue
}).then((response) => {
  console.log(response);
});

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Paul