Javascript 盖茨比构建时的Graphql请求不';不发送标题
我在前端(盖茨比)和pollo之间添加了身份验证。这适用于运行时的请求。然而,在构建时,没有头文件不会发送给Apollo。我有以下代码:Javascript 盖茨比构建时的Graphql请求不';不发送标题,javascript,graphql,react-apollo,apollo-client,apollo-server,Javascript,Graphql,React Apollo,Apollo Client,Apollo Server,我在前端(盖茨比)和pollo之间添加了身份验证。这适用于运行时的请求。然而,在构建时,没有头文件不会发送给Apollo。我有以下代码: // SERVER SIDE // apollo server setup const { ApolloServer, AuthenticationError } = require("apollo-server-lambda") ... //other imports const server = new ApolloServer({
// SERVER SIDE
// apollo server setup
const { ApolloServer, AuthenticationError } = require("apollo-server-lambda")
... //other imports
const server = new ApolloServer({
context: ({ event, context }) => {
if (!event.headers.authorization) {
// No authentication header
throw new AuthenticationError("must authenticate")
}
// Authenticate
},
resolvers,
schema: schemaWithResolvers,
introspection: true,
playground: true,
formatError: (err) => {
console.log("Error", err)
return err
},
})
apollo客户端安装程序在运行时将授权标头添加到graphql请求中。但在构建时,由于没有可用的头,我会收到错误。
在构建期间发送的头文件缺少什么?或者我是否可以在构建期间检测调用是否被触发,以便忽略身份验证过程?
非常感谢。感谢@xadm,我发现要在构建时使用源数据,您需要安装插件并将其添加到配置中。我使用gatsby源代码graphql,但忘了在这里添加标题
//gatsby-config-js
{
resolve: "gatsby-source-graphql",
options: {
typeName: "Apollo",
fieldName: "apollo",
createLink: (pluginOptions) => {
return createHttpLink({
uri: "your uri",
fetch,
credentials: "same-origin",
headers: {
Authorization: "your authorization",
},
})
},
},
},
关于这方面的文章:
graphql()
在节点env(运行时服务器/客户机的独立部分)中调用构建时工作。。。指向内部gatsby“服务器”,单独配置客户端以进行构建,或者使用一些源插件进行外部graphql api访问,配置它,等等。那么我应该在服务器端添加一个客户端吗?就在阿波罗服务器旁边?
// CLIENT SIDE
// gatsby-node (during build-time)
// => This call gets rejected during buildtime because authorization header is not available.
exports.createPages = async function ({ actions, graphql }) {
const { data } = await graphql(`
query {
apollo {
allWathever {
id
}
}
}
`)
}
//gatsby-config-js
{
resolve: "gatsby-source-graphql",
options: {
typeName: "Apollo",
fieldName: "apollo",
createLink: (pluginOptions) => {
return createHttpLink({
uri: "your uri",
fetch,
credentials: "same-origin",
headers: {
Authorization: "your authorization",
},
})
},
},
},