javascript - 使用相对路径而不是 API 服务器进行中继突变

标签 javascript reactjs http-status-code-404 graphql relayjs

我正在尝试将我的中继突变与我的 graphql 突变联系起来。我的 React/Relay 前端在 localhost:4444 上运行,而 graphql API 在 localhost:3000/graphql 上运行。

我可以毫无问题地从 API 查询/读取数据。但是如果我像这样通过 RelayDefaultnetwork 层将突变传递给 graphql 。我似乎得到了相对路径引用。

    //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);

当我执行突变时,Relay 似乎从相对路径引用 Graphql。导致我在控制台中收到 404 错误消息,提示找不到 localhost:4444/graphql。它应该寻找localhost:3000/graphql

我可以将其记录到 react 中继库中的屏幕

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);
  };

有人遇到过这个问题吗?我确信人们在不同的服务器上有 GraphQL 服务器。可能是什么原因造成的?

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

最佳答案

您可以使用 webpack-dev-server 的代理选项来代理从端口 3000 到端口 4444 的所有 /graphql 请求。

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
}, 

在此处查看更多信息:https://github.com/bfwg/relay-gallery/blob/master/config/webpack-dev-server.config.js#L20

关于javascript - 使用相对路径而不是 API 服务器进行中继突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466284/

相关文章:

javascript - 使用 Node 进行 Jest 测试 - 超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调

javascript - 如何使用 MUI Texfield 和 Redux 更改状态

javascript - ReduxForm - enableReinitialize 不更新嵌套 FieldArrays 中的值

google-chrome - 对所有包含 "6_S3_"的不存在页面的奇数请求

javascript - NGINX+Bolt CMS - 静态内容调用返回 404 错误

css - Django + 管道压缩 css : 404 for the output_filename css file

javascript - Switch 语句中涉及带条件数组的 Case

javascript - Angular-Kendo TreeView - 使用 div 和 span 模板

javascript - 如何在保持第一列排序的同时按第二列排序?

javascript - 将 jQuery 对象转换为 HTML