我想我一定没有得到什么。我正在尝试将我的apollo客户端localhost:8000
连接到后端localhost:4000
,并使用不同域上的客户端和服务器。我在前端使用apollo(apollo-boost
),在后端使用<express-graphql
(不是(!)apollo服务器)。
当我从客户端向服务器发送一些登录数据时,我得到一个响应:用户对象或错误等。这很好。但是,用户实际上从未登录过服务器(当我检入graphiql并请求用户对象时,它始终为null)。
我不知道这是否是一个CORS问题,因为当我将客户端和服务器都放在同一个域上时,一切都可以正常工作吗?
这是客户端代码:
import ApolloClient from "apollo-boost"
import fetch from "isomorphic-fetch"
import { HttpLink } from "apollo-link-http"
import { InMemoryCache } from "apollo-cache-inmemory"
const cache = new InMemoryCache()
const link = new HttpLink({
// uri: "http://localhost:4000/graphql",
credentials: "include",
})
export const client = new ApolloClient({
cache,
fetch,
link,
dataIdFromObject: o => o.id,
uri: "http://localhost:4000/graphql",
})
服务器上的相关位是:
app.use(
session({
resave: true,
saveUninitialized: true,
secret: 'whatever',
cookie: {
secure: false
},
store: new MongoStore({
url: MONGO_URI,
autoReconnect: true
})
})
);
var corsOptions = {
origin: 'http://localhost:8000',
credentials: true
};
app.use(cors(corsOptions));
app.use(passport.initialize());
app.use(passport.session());
// Instruct Express to pass on any request made to the '/graphql' route
// to the GraphQL instance.
app.use(
'/graphql',
expressGraphQL({
schema,
graphiql: true
})
);
答案 0 :(得分:0)
好像他们的API略有变化。 我通过在客户端执行此操作来修复它:
import ApolloClient from "apollo-boost"
import fetch from "isomorphic-fetch"
import { InMemoryCache } from "apollo-cache-inmemory"
const cache = new InMemoryCache()
export const client = new ApolloClient({
cache,
fetch,
link,
credentials: "include",
dataIdFromObject: o => o.id,
uri: "http://localhost:4000/graphql",
})
因此,我将credentials: "include",
直接包含在Apollo客户端中,而不是httpLink中-实际删除了该链接。