亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GraphQL 解析器上下文在 Playground 中工作,但在官方 NextJS 入門示例中不在

GraphQL 解析器上下文在 Playground 中工作,但在官方 NextJS 入門示例中不在

慕容708150 2023-04-27 17:08:05
我正在重新配置我的 NextJS/Apollo 應用程序以允許使用 GraphQL API 路由的 SSG,并且我正在使用這個官方 NextJS 入門示例作為客戶端配置的基礎。我在自己的應用程序中遇到了一個有趣的問題,所以我回到了入門示例并嘗試重現它,并且能夠重現。問題是,如果沒有任何上下文對象傳遞到查詢解析器,一切都可以正常工作(在操場上和客戶端上)。但是,當您引入上下文對象并將其傳遞給解析器時,它在 playground 中工作正常,但上下文對象是undefined從客戶端觸發的。這是來自官方 NextJS 入門示例的代碼,我將在添加任何內容的地方進行評論。graphql.jsimport { ApolloServer } from "apollo-server-micro";import { schema } from "../../apollo/schema";const apolloServer = new ApolloServer({    schema,    context: {        //         foo: "bar",   // this is the context object I've added    },                //});export const config = {    api: {        bodyParser: false,    },};export default apolloServer.createHandler({ path: "/api/graphql" });typedefs.jsimport { gql } from '@apollo/client'export const typeDefs = gql`  type User {    id: ID!    name: String!    status: String!  }  type Query {    viewer: User  }`schema.jsimport { makeExecutableSchema } from 'graphql-tools'import { typeDefs } from './type-defs'import { resolvers } from './resolvers'export const schema = makeExecutableSchema({  typeDefs,  resolvers,})resolvers.jsexport const resolvers = {    Query: {        viewer: (_parent, _args, context, _info) => {            console.log("context", context); // console log check that I've added            return { id: 1, name: "John Smith", status: "cached" };        },    },};當我在 GraphQL playground 中運行它并查詢 API 時,它給了我正確的響應,并且在我的終端控制臺中它foo: bar從控制臺日志返回上下文對象,因此在服務器中正確傳遞了上下文對象。但是,當我在瀏覽器中訪問索引頁面時,是這樣的:index.jsimport gql from "graphql-tag";import Link from "next/link";import { useQuery } from "@apollo/client";import { initializeApollo } from "../apollo/client";const ViewerQuery = gql`    query ViewerQuery {        viewer {            id            name            status        }    }...呈現查看器名稱和查看器狀態,因此查詢實際上正在發生,但在控制臺中,context對象控制臺日志正在返回undefined。所以當在客戶端使用時,context不知何故丟失了。我覺得這很有趣,因為這是一個正式的 NextJS 入門示例,除非他們將客戶端設置為不接受解析器中的上下文,否則我看不出問題是什么。而且,如果客戶端未設置為接受上下文,是否還有其他帶有客戶端設置的官方示例?
查看完整描述

1 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

我已經想通了這個問題??蛻舳伺渲糜糜?code>SchemaLinkhttp 請求,上下文在SchemaLink構造函數中傳遞,而不是在服務器選項中傳遞,因為上下文是在帶有 httpLink 的 http 標頭中傳遞的。



查看完整回答
反對 回復 2023-04-27
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號