Node.js 页面加载时的Graphql错误请求
大家好,节日快乐 我正在用KeystoneJS和NextJS构建一个网站。我在中间添加了Apollo客户端 然而,我现在和阿波罗的客户有一个问题。我也尝试了不同的地方,但结果是一样的,不管怎样,这是我的app.tsx文件Node.js 页面加载时的Graphql错误请求,node.js,reactjs,next.js,apollo-client,keystonejs,Node.js,Reactjs,Next.js,Apollo Client,Keystonejs,大家好,节日快乐 我正在用KeystoneJS和NextJS构建一个网站。我在中间添加了Apollo客户端 然而,我现在和阿波罗的客户有一个问题。我也尝试了不同的地方,但结果是一样的,不管怎样,这是我的app.tsx文件 import { useReducer } from "react"; import { useRouter } from "next/router"; import { ThemeProvider } from "styled
import { useReducer } from "react";
import { useRouter } from "next/router";
import { ThemeProvider } from "styled-components";
import { HttpLink } from "apollo-link-http";
import { ApolloClient } from "apollo-client";
import { InMemoryCache } from "apollo-cache-inmemory";
import { Query, KeystoneProvider } from "@keystonejs/apollo-helpers";
import { ApolloProvider, gql } from "@apollo/client";
import { primaryTheme } from "../styles/theme";
import GlobalStyle from "../styles/global";
import { initialState, globalReducer } from "../context/reducer";
import Meta from "../components/global/Meta";
import { Header } from "../components/global/Header";
import { globalContext } from "../context/contex";
import Footer from "../components/global/Footer";
import Loading from "../components/global/Loading";
const client = new ApolloClient({
ssrMode: true,
cache: new InMemoryCache(),
link: new HttpLink({
uri: process.env.NEXT_PUBLIC_API_URL,
fetchOptions: {
mode: 'cors'
},
}),
});
const QUERY = gql`
query {
allOperations{
id
name
}
}
`
const MyApp = ({ Component, pageProps }) => {
const [store, dispatch] = useReducer(globalReducer, initialState);
const router = useRouter();
return (
<ApolloProvider client={client}>
<KeystoneProvider>
<ThemeProvider theme={primaryTheme}>
<Meta />
{router.route !== "/" && <Header />}
<Query
query={QUERY}
>
{({ loading, data }) => {
console.log(data);
if(loading){
return <Loading />
} else {
return <Component {...pageProps} />
}}}
</Query>
<Footer />
<GlobalStyle />
</ThemeProvider>
</KeystoneProvider>
</ApolloProvider>
);
};
export default MyApp;
后端正在本地主机上运行:3000
前端正在本地主机7777上运行
提前谢谢
Happy Holidays找到了此错误的原因,KeysonProvider出于某种原因创建了此问题。如果有人知道原因,最好知道原因。我也遇到了同样的问题,并且已经找到了解决办法 该错误是由@keystonejs/apollo helpers中过时的GraphQL查询引起的。您可以通过更新dist目录中的代码,并更新包含META_QUERY变量的所有文件,以包含缺少的查询子字段
query ListMeta {
_ksListsMeta {
schema {
type
queries {
item
list
meta
__typename
}
relatedFields {
type
fields
}
}
}
}
请记住,当重新安装/更新@keystonejs/apollo helpers包时,此解决方案将不起作用。400是错误的请求,您没有发送服务器所需的确切数据。查看您要发送的内容以及GraphQL合同要求的内容。@Nishant我也更新了问题,错误显示“\u ListQueries”类型的“Field”查询必须有一系列子字段。您是指“queries{…}”?“review”吗。我根本不要求这个。
const { Keystone } = require("@keystonejs/keystone");
const { GraphQLApp } = require("@keystonejs/app-graphql");
const { AdminUIApp } = require("@keystonejs/app-admin-ui");
const { MongooseAdapter: Adapter } = require("@keystonejs/adapter-mongoose");
const { PasswordAuthStrategy } = require("@keystonejs/auth-password");
const { NextApp } = require('@keystonejs/app-next');
require("dotenv").config();
const OperationSchema = require("./lists/Operation.ts");
const UserSchema = require("./lists/User.ts");
const PROJECT_NAME = "frank";
const adapterConfig = {
mongoUri: process.env.DATABASE,
};
/**
* You've got a new KeystoneJS Project! Things you might want to do next:
* - Add adapter config options (See: https://keystonejs.com/keystonejs/adapter-mongoose/)
* - Select configure access control and authentication (See: https://keystonejs.com/api/access-control)
*/
const keystone = new Keystone({
adapter: new Adapter(adapterConfig),
});
keystone.createList("Operation", OperationSchema);
keystone.createList("User", UserSchema);
const authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: "User",
config: {
identityField: "username",
secretField: "password",
},
});
module.exports = {
keystone,
apps: [
new GraphQLApp(),
new AdminUIApp({ name: PROJECT_NAME, enableDefaultRoute: false }),
new NextApp({ dir: '../frontend/' }),
],
};
query ListMeta {
_ksListsMeta {
schema {
type
queries {
item
list
meta
__typename
}
relatedFields {
type
fields
}
}
}
}