使用Apollo GraphQL在Next.js应用程序上进行虚拟主机

时间:2019-11-27 20:10:42

标签: apollo next.js apollo-client

我有一个用Next.js和Apollo制作的web应用,如示例with-apollo所示。我想通过我的webapp(基于名称的虚拟主机)为多个域提供服务。不幸的是,GOManager_ = std::make_shared<ObjectManager>(playerAges_); GEHandler_ = std::make_shared<GameEventHandler>(GOManager_); 中的pip install PyBoard 要求absolute server URL使用域,但这使后端应用无法识别用户真正访问过的域。有没有一种方法可以根据实际请求使用动态URL配置HttpLink或使用相对URL或其他任何方法?

2 个答案:

答案 0 :(得分:0)

使用Apollo链接拦截查询并在上下文中设置uri属性

const authMiddleware = setContext((operation, { uri }) => {
  return refreshToken().then(res => ({
    uri: this.getURI()
  })
}))

或者使用Angular的HttpClient拦截器拦截请求并更改端点。

https://github.com/apollographql/apollo-angular/tree/master/packages/apollo-angular-link-http#options

来源:Updating uri of apollo client instance

答案 1 :(得分:0)

在服务器端调用时,传递给NextPageContext的{​​{1}}对象包括getInitialProps对象。因此,您可以执行以下操作:

req

然后您可以将此基本URL连同初始状态一起传递到WithApollo.getInitialProps = async ctx => { const { AppTree, req } = ctx const linkBaseUrl = req ? req.protocol + '://' + req.get('host') : '' ... } ,并在其前面加上HttpLink的URL。在客户端,这将在一个空字符串之前(您只需要服务器上的完整URL)。