2016-07-19 6 views
1

Ich versuche, meine Relay-Mutationen zu meinen graphql-Mutationen zu binden. Ich habe mein React/Relay-Frontend unter localhost:4444 ausgeführt, und meine graphql-API läuft unter localhost:3000/graphql.Relay Mutation mit relativen Pfad anstelle von API-Server

Ich bin in der Lage, Daten von der API ohne Probleme abzufragen/lesen. ABER Wenn ich eine Mutation zu graphql durch die RelayDefaultnetwork-Schicht so überlasse. Ich bekomme anscheinend eine relative Pfadangabe.

//RT: value in .env file 
    GRAPHQLURL= http://localhost:3000/graphql 

Server.JS  
    const networkLayer = new Relay.DefaultNetworkLayer(process.env.GRAPHQLURL); 

Client.js 
// Create Relay environment 
const environment = new Relay.Environment(); 
environment.injectNetworkLayer(new Relay.DefaultNetworkLayer(
    'http://localhost:3000/graphql',{ 
     credentials: 'same-origin', 
    })); 
IsomorphicRelay.injectPreparedData(environment, data); 

Wenn ich eine Mutation durchführen, scheint Relay Graphql von einem relativen Pfad zu verweisen. Wenn ich einen 404 in meiner Konsole bekomme, kann ich nicht localhost:4444/graphql finden. Es sollte nach localhost:3000/graphql suchen.

Ich bin in der Lage diese lib

RelayDefaultNetworkLayer.js "react-relay" 

    RelayDefaultNetworkLayer.prototype._sendMutation = function _sendMutation(request) { 
    var init = undefined; 
    var files = request.getFiles(); 
    if (files) { 
     if (!global.FormData) { 
     throw new Error('Uploading files without `FormData` not supported.'); 
     } 
     var formData = new FormData(); 
     formData.append('query', request.getQueryString()); 
     formData.append('variables', JSON.stringify(request.getVariables())); 
     for (var filename in files) { 
     if (files.hasOwnProperty(filename)) { 
      formData.append(filename, files[filename]); 
     } 
     } 
     init = _extends({}, this._init, { 
     body: formData, 
     method: 'POST' 
     }); 
    } else { 
     init = _extends({}, this._init, { 
     body: JSON.stringify({ 
      query: request.getQueryString(), 
      variables: request.getVariables() 
     }), 
     headers: _extends({}, this._init.headers, { 
      'Accept': '*/*', 
      'Content-Type': 'application/json' 
     }), 
     method: 'POST' 
     }); 
    } 
    return fetch(this._uri, init).then(throwOnServerError); 
    }; 

Hat sich zu diesem Thema jemand lief im reagieren Relais auf dem Bildschirm, um sich abzumelden? Ich bin mir sicher, dass die Leute dort GraphQL Server auf separaten Servern haben. Was könnte das verursachen?

https://github.com/facebook/relay/issues/1291

+0

Sie überprüfen, ob Ihre Mutationen funktionieren, zum Beispiel mit graphiql? 404 scheint etwas merkwürdig, aber ich bekomme 400, wenn ich vergessen habe, ein Attribut zu setzen, das auf der Serverseite mit GraphQLNonNull benötigt wird. Übrigens, ich benutze die nodejs Implementierung – jkettmann

+0

Die Mutationen arbeiten gut durch graphql. Ich kann das auch shim und es funktionieren lassen, indem ich die Relay-Bibliothek bearbeite, um auf meine URL zu schauen. – jackncoke

Antwort

0

Sie ein webpack-dev-Server Proxy-Option Proxy alle /graphql Anfragen von Port 3000 auf Port 4444.

devServer:{ 
    contentBase: '../frontend/src/www', //Relative directory for base of server 
    proxy: {'/': 'http://localhost:3000'}, 
    devtool: 'eval', 
    hot: true,  //Live-reload 
    inline: true, 
    port: 3001  //Port Number 
}, 

Kasse hier für weitere Informationen verwenden können: Hat https://github.com/bfwg/relay-gallery/blob/master/config/webpack-dev-server.config.js#L20