我不知道如何使用该命令将我的架构gradlew转换为文档中指定的文件。GraphQLJSON
CMD我在项目文件夹中打开,运行gradlew命令一次,它给了我这个错误:
Project 'module' not found in root project gradlew
我在项目中创建了一个名为“module”的模块,现在它抛出以下错误:
Task 'downloadApolloSchema' not found in project ':module'.
我已经将所有依赖项添加到最新版本(截至发布时为 2.0.0),所以我不知道为什么会发生这种情况。我已经在网上搜索过,但没有找到任何关于此的信息......
这是我试图在以下位置发出的命令CMD:
C:\Users\myuser\AndroidStudioProjects\GraphQLApp\app>..\gradlew :module:downloadApolloSchema -Pcom.apollographql.apollo.endpoint=https://graphql-udemy-android.herokuapp.com/graphql -Pcom.apollographql.apollo.schema=src/main/graphql/com/example/schema.json
Run Code Online (Sandbox Code Playgroud)
我必须转到上一个目录 ( ..\),因为该gradlew命令位于我的应用程序文件夹上方。
我使用的是 Windows,我的 Gradle 版本是 6.4。
我有以下阿波罗链接:
const link = ApolloLink.from([
serializingLink,
httpAuthLink,
queueLink,
retryLink,
errorLink,
uploadLink,
httpLink
]);
Run Code Online (Sandbox Code Playgroud)
它们都具有正确的设置添加新链接后,该错误开始出现在控制台中:
Error: You are calling concat on a terminating link, which will have no effect
Run Code Online (Sandbox Code Playgroud)
通过阅读另一期,我发现这可能与数组内部链接的顺序有关。
我可以使用 Strapi 和 GraphQL 创建多个相同类型的元素吗?例如 -
createMultipleFoo mutation(data: [
nameOfFoo: "ooaoaoa",
weightOfFoo: "aododo"
], ....)
Run Code Online (Sandbox Code Playgroud) 目前,以下方法有效,但我知道这是不好的做法,我不想在将来因这种实现而遇到问题。
export const loginQuery = ({ email, password }) => `
mutation login {
login(email: "${email}", password: "${password}") {
authToken
}
}
`;
export default ({ url, method, userPath }) => {
cy.fixture(userPath).then(res => {
const query = loginQuery(res);
cy.request({
method,
url,
headers: { 'Content-Type': 'application/json' },
body: { query },
failOnStatusCode: false
});
});
};
Run Code Online (Sandbox Code Playgroud)
如何正常传入变量而不是通过字符串插值手动执行?
我这样写的原因是因为我不能使用react-apollo/ graphql-tag。我已经尝试过,但是graphql需要react-apollo将其包装在一个不适用于此 cypress 上下文的组件中。
注意:上述实现不适用于对象/数组。我需要手动传入突变中写出的对象中的特定键,而不仅仅是一个变量来表示整个对象。这显然是一个问题。
/home),其中包含卡片形式的产品列表(通过\n检索useQuery),每个卡片都有一个赞成按钮/home,\nuseQuery不会\xe2\x80\x99 检索到具有正确票数的产品为什么useQuery在我刷新另一页之前\n不返回正确的金额?
作为参考,如下:
\nconst Home = props => {\n const {data, loading, error} = useQuery(GET_PRODUCTS_LOGGED_IN, {\n variables: {\n userid: props.userid\n }\n });\n \n console.log(\n 'data', data.products // this data is outdated after I go from /home -> /profile -> /home\n );\n\n return (\n <Container>\n {_.map(data.products, product => (\n <VoteButton\n hasVoted={product.hasVoted}\n likes={product.likes}\n productid={product.productid}\n />\n …Run Code Online (Sandbox Code Playgroud) 我正在使用 Apollo-client 将突变发布到我的 graphql 服务器。突变完成后,我想重新获取该数据。我尝试使用挂钩refetchQueries中的参数useMutation,但是当我执行代码时收到此错误:
查询选项是必需的。您必须在查询选项中指定您的 GraphQL 文档。
这是发送突变的代码行:
const [addUser, { data, loading, error }] =
useMutation(ADD_USER_QUERY, {
refetchQueries:[GET_USERS_QUERY]
});
Run Code Online (Sandbox Code Playgroud)
这是我的查询(硬编码参数是为了查看问题是否是由于传递变量引起的):
export const ADD_USER_QUERY = gql`
mutation {
createUser(name: "Albert Einstein", email: "albert@yahoo.ca") {
id
name
}
}
`;
Run Code Online (Sandbox Code Playgroud)
谢谢你!
在解析器中,throw new createError.BadRequest("bad input")错误被劫持Graphql-shield并显示为
{
"errors": [
{
"message": "Not Authorised!",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"myMutation"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"stacktrace": [
"Error: Not Authorised!",
Run Code Online (Sandbox Code Playgroud)
这是 Apollo 服务器设置
const schema = buildSubgraphSchema([
{ typeDefs: await typeDefs(), resolvers },
]);
const apolloServer = new ApolloServer({
schema: applyMiddleware(schema, permissions),
context: async ({ req, res }) => new AuthenticatedContext(req, res)
});
Run Code Online (Sandbox Code Playgroud)
如何返回实际发生的错误?
我正在尝试使用 nextjs13 设置 graphql 前端应用程序,但使用新的文件夹结构,因为没有 _app.tsx 我想知道如何设置
在我们像这样包装整个应用程序之前
<ApolloProvider client={client}>
<Component {...pageProps} />
</ApolloProvider>
Run Code Online (Sandbox Code Playgroud)
现在如何设置呢?
在 apollo-server 3 中,我可以在创建 apollo 服务器时设置上下文,如下所示:
const server = new ApolloServer({
debug: true,
schema: executableSchema,
context: contextFunction(secretValues),
...
Run Code Online (Sandbox Code Playgroud)
我的contextFunction看起来像这样:
export const contextFunction =
(secretValues: AwsSecretValues) =>
async ({ req, res }: ExpressContext) => {
const sessionId = extractSessionIdFromCookies(req.headers.cookie);
const session = await validateSession(
sessionId || req.headers.authorization,
);
if (session) {
session.set({ expiresAt: Date.now() + DEFAULT_SESSION_EXTEND_TIME });
await session.save();
generateCookie(session._id, res);
}
return {
pubsub,
dataLoaders: dataLoaderFactory(),
session,
req,
res,
secretValues,
};
};
Run Code Online (Sandbox Code Playgroud)
它很有用,因为我不必在每个解析器上独立刷新会话,并且每个解析器都有它的最新版本,而且我还能够传递一堆其他有用的东西。
据我所知,apollo-server 4 中没有此选项。但是,如果您无法设置上下文(除了将内容深入到子解析器),那么上下文的全部意义是什么?一定有办法,但找不到办法。
我有一个 Apollo GraphQL 服务器与 API 通信,返回响应的大致结构如下:
{
"pagination": {
"page": 1,
// more stuff
},
sorting: {
// even more stuff
},
data: [ // Actual data ]
}
Run Code Online (Sandbox Code Playgroud)
这个结构将在我广泛使用的这个 API 的几乎所有响应中共享。data大多数情况下将是一个数组,但也可以是一个对象。
我如何以有效的方式编写它,以便我不必在模式中的每个数据类型上重复所有这些pagination和sorting字段?
非常感谢!
apollo ×10
graphql ×8
javascript ×2
reactjs ×2
cypress ×1
express ×1
graphql-js ×1
next.js ×1
next.js13 ×1
react-apollo ×1
relay ×1
strapi ×1