Javascript Meteor/SSR/Apollo客户端-试图与Apollo一起设置SSR并获取数据,但找不到GLOABLY

Javascript Meteor/SSR/Apollo客户端-试图与Apollo一起设置SSR并获取数据,但找不到GLOABLY,javascript,meteor,server-side-rendering,react-apollo,apollo-client,Javascript,Meteor,Server Side Rendering,React Apollo,Apollo Client,我正在尝试使用使用Apollo的meteor应用程序设置服务器端渲染。我遇到了以下我无法解决的错误(甚至在各种在线帖子之后——github等等——并尝试使用不同的软件包:unfetch、node fetch…) 运行模板时出错:未找到不变冲突:获取 全局且未传递获取程序,以修复为您的 像环境一样 例如:从“节点获取”导入获取;导入{createHttpLink} 来自“阿波罗链接http” 以下是服务器端的代码: import fetch from 'node-fetch'; import { 

我正在尝试使用使用Apollo的meteor应用程序设置服务器端渲染。我遇到了以下我无法解决的错误(甚至在各种在线帖子之后——github等等——并尝试使用不同的软件包:unfetch、node fetch…)

运行模板时出错:未找到不变冲突:获取 全局且未传递获取程序,以修复为您的 像环境一样

例如:从“节点获取”导入获取;导入{createHttpLink} 来自“阿波罗链接http”

以下是服务器端的代码:

import fetch from 'node-fetch';
import { 
  Accounts
} from 'meteor/accounts-base';
import { 
  Meteor
} from 'meteor/meteor';
import {
  onPageLoad
} from 'meteor/server-render';
import { 
  StaticRouter
} from 'react-router-dom';
import {
  renderToString
} from 'react-dom/server';
import React from 'react';
import { 
  routes
} from './../both/router';
import Menu from './../../ui/Menu';
import {
  ApolloProvider
} from 'react-apollo';
import {
  ApolloClient
} from 'apollo-client';
import {
  createHttpLink
} from 'apollo-link-http'
import './apollo'; // THIS IS THE APOLLO SERVER CODE

onPageLoad((sink) => {
      let App = props => ( <StaticRouter location = {
          props.location
        } > {
          routes
        } </StaticRouter>
      )

      const client = new ApolloClient({
        ssrMode: true,
        link: createHttpLink({
          uri: '/graphql',
          credentials: 'same-origin',
          headers: {
            cookie: sink.request.cookies,
          },
        }),
        fetch: fetch,
        cache: new InMemoryCache(),
      });

      let AppToRender = props => ( <ApolloProvider client={
          client
        }>
        <App />
        </ApolloProvider>
      )

      sink.renderIntoElementById('app', renderToString( <AppToRender location={
          sink.request.url
        }
        />));

      });
从“节点获取”导入获取;
导入{
账户
}来自“流星/账户库”;
导入{
流星
}来自“流星/流星”;
进口{
页面加载
}来自“流星/服务器渲染”;
导入{
静态路由器
}从“反应路由器dom”;
进口{
渲染字符串
}来自“react dom/server”;
从“React”导入React;
导入{
路线
}从“/../both/router”;
从“/../../ui/菜单”导入菜单;
进口{
阿波罗提供者
}从‘阿波罗反应’;
进口{
阿波罗客户
}来自“阿波罗客户”;
进口{
createHttpLink
}来自“阿波罗链接http”
导入“./apollo”;//这是阿波罗服务器代码
onPageLoad((接收器)=>{
让App=props=>({
路线
} 
)
const客户端=新客户端({
是的,
链接:createHttpLink({
uri:“/graphql”,
凭据:“相同来源”,
标题:{
cookie:sink.request.cookies,
},
}),
取:取,
缓存:新的InMemoryCache(),
});
让AppToRender=props=>(
)
renderIntoElementById('app',renderString());
});

我还尝试了阿波罗助推的阿波罗客户端,但也没有成功。如果有人能帮助解决这个问题,我将不胜感激。

在重新安装和删除了三次之后,我发现在测试期间,我曾将“fetch:fetch”移到createHttpLink之外,但仍在客户端的新Apollo客户端内

最后,它可用于以下导入:

import fetch from 'unfetch';
import React from 'react';
import { Accounts } from 'meteor/accounts-base';
import { Meteor } from 'meteor/meteor';
import { onPageLoad } from 'meteor/server-render';
import { StaticRouter } from 'react-router-dom';
import { renderToString } from 'react-dom/server';
import { routes } from './../both/router';
import { ApolloProvider } from 'react-apollo';
import { ApolloClient } from 'apollo-client';
import { createHttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';

import Menu from './../../ui/Menu';

import './email-templates';
import './apollo';
import './users';
以及在服务器端为SSR创建以下Apollo客户端:

onPageLoad((sink) => {
    let App = props => (
        <StaticRouter location={props.location}>
            {routes}
        </StaticRouter>
    )

    const client = new ApolloClient({
       ssrMode: true,
       link: createHttpLink({
         uri: '/graphql',
         credentials: 'same-origin',
         headers: {
           cookie: sink.request.cookies,
         },
         fetch: fetch,
       }),
       cache: new InMemoryCache(),
    });

    let AppToRender = props => (
        <ApolloProvider client={client}>
            <Menu />
            <App />
        </ApolloProvider>
    )

     sink.renderIntoElementById('app', renderToString(<AppToRender location={sink.request.url} />));

});
onPageLoad((接收器)=>{
让App=props=>(
{routes}
)
const客户端=新客户端({
是的,
链接:createHttpLink({
uri:“/graphql”,
凭据:“相同来源”,
标题:{
cookie:sink.request.cookies,
},
取:取,
}),
缓存:新的InMemoryCache(),
});
让AppToRender=props=>(
)
sink.renderIntoElementById('app',renderString());
});
不得不承认,S.O.上的缩进没有很好地显示出来,这很难解决我的问题,但在我的项目中很好。我尝试了很多不同的东西,以至于我忘记了从阿波罗客户端的创建开始