2016-10-19 10 views
2

Ich versuche, eine Referenzimplementierung von GraphQL.js in einer Node.js-Umgebung als Server zu erhalten. Beachten Sie, dass ich begrenzte Erfahrung mit Node.js habe. Im Moment benutze ich node v4.2.6, welches das neueste Paket von Ubuntu für Ubuntu 16.04 ist.Erforderliche Mindestknotenversion für GraphQL?

The official documentation sagt, dass dieser Skript funktionieren soll:

var express = require('express'); 
var graphqlHTTP = require('express-graphql'); 
var { buildSchema } = require('graphql'); 

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

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

var app = express(); 
app.use('/graphql', graphqlHTTP({ 
    schema: schema, 
    rootValue: root, 
    graphiql: true, 
})); 
app.listen(4000); 
console.log('Running a GraphQL API server at localhost:4000/graphql'); 

, die mit einem Syntaxfehler fehlschlägt:

server.js:3 
var { buildSchema } = require('graphql'); 
    ^

SyntaxError: Unexpected token { 
    at exports.runInThisContext (vm.js:53:16) 
    at Module._compile (module.js:374:25) 
    at Object.Module._extensions..js (module.js:417:10) 
    at Module.load (module.js:344:32) 
    at Function.Module._load (module.js:301:12) 
    at Function.Module.runMain (module.js:442:10) 
    at startup (node.js:136:18) 
    at node.js:966:3 

The express-graphql project site zeigt ein deutlich anderes Skript, aber ein, wo ich ein Schema separat zu montieren habe . The GraphQL.js project site hat dieses Skript zum Zusammenbauen eines Schema:

import { 
    graphql, 
    GraphQLSchema, 
    GraphQLObjectType, 
    GraphQLString 
} from 'graphql'; 

var schema = new GraphQLSchema({ 
    query: new GraphQLObjectType({ 
    name: 'RootQueryType', 
    fields: { 
     hello: { 
     type: GraphQLString, 
     resolve() { 
      return 'world'; 
     } 
     } 
    } 
    }) 
}); 

Auch das mit einem Syntaxfehler fehlschlägt:

server.js:1 
(function (exports, require, module, __filename, __dirname) { import { 
                   ^^^^^^ 

SyntaxError: Unexpected reserved word 
    at exports.runInThisContext (vm.js:53:16) 
    at Module._compile (module.js:374:25) 
    at Object.Module._extensions..js (module.js:417:10) 
    at Module.load (module.js:344:32) 
    at Function.Module._load (module.js:301:12) 
    at Function.Module.runMain (module.js:442:10) 
    at startup (node.js:136:18) 
    at node.js:966:3 

Ich vermute, dass vielleicht v4.2.6 von Node.js zu alt ist. Ist das korrekt? Wenn ja, welche Mindestversion von Node.js benötigen Sie für die Verwendung von GraphQL.js und express-graphql? Und wenn das nicht mein Problem ist ... irgendeine Idee was ist?

Antwort

2

dDie prerequisites für dieses Tutorial sagen:

Before getting started, you should have Node v6 installed [...]

Obwohl Messe es weiterhin mit:

[...] , although the examples should mostly work in previous versions of Node as well.

Knoten v4 nicht Destrukturierung nicht unterstützt, die das Teil ist es für Sie ist erstickt an . Sie können unter node.green nachlesen, welche Funktionen von welchen Node-Versionen unterstützt werden.

That too fails with a syntax error:

import|export werden in keiner Version von Node unterstützt. Das müßtest du übersetzen. Oder Sie können einfach das Modulsystem von Node verwenden. Dafür sollte es ungefähr so ​​aussehen:

var graphqlModule = require("graphql"); 
var graphql = graphqlModule.graphql; 
var GraphQLSchema = graphqlModule.GraphQLSchema; 
// ... 
+0

Ah, danke! Einer der Nachteile von "Recherche durch Google-Suche" ist, dass dumme kleine Dinge wie eine klare Aussage über Voraussetzungen meinen Weg nicht kreuzen. Obwohl ich zu meiner Verteidigung weder [die GraphQL-Code-Seite] (http://graphql.org/code/) noch die [express-graphql'-Projektseite] (https://github.com/graphql/express- graphql), noch die [GraphQL.js-Projektseite] (https://github.com/graphql/graphql-js) erwähnen diese Voraussetzung. Ich werde v6 in Kürze installieren. Danke noch einmal! – CommonsWare

+0

Np! Bitte markieren Sie als korrekt, wenn es Ihre Frage beantwortet. Ich habe die Antwort aktualisiert, um den anderen Fehler bezüglich 'import' zu beheben (der in keiner Version von Node funktioniert). Vielleicht möchten Sie etwas wie nvm zum Verwalten mehrerer Versionen von Node auschecken. In Bezug auf diese anderen Seiten benötigen diese Module wahrscheinlich keinen Knoten v6, nur die Syntax im Tutorial und/oder Beispiele für diese Module können (und könnten für frühere Knotenversionen neu geschrieben werden). Vieles wird mit der Erwartung geschrieben, dass Sie wissen, was in welchen Node-Versionen nativ funktioniert und was eine Transpilation erfordert. – JMM

Verwandte Themen