【发布时间】:2019-11-06 13:12:36
【问题描述】:
我正在为我的项目使用 Apollo Server v2
我已经添加了像这里给出的身份验证https://www.apollographql.com/docs/apollo-server/features/authentication/
我想在我的Query 和Mutation 中包含嵌套解析器,所以我按照https://stackoverflow.com/a/40916089/7584077 做了
问题是我的解析器比上面显示的要复杂一点
// typeDefs/typeDefs.js
import { gql } from "apollo-server-express";
import issueTracker from "./issueTracker";
const base = gql`
scalar Timestamp
type Query {
ping: String!
}
type Mutation {
ping: String!
}
`;
export default [base, issueTracker];
// typeDefs/issuetracker.js
import { gql } from "apollo-server-express";
export default gql`
type Comment {
id: ID
message: String
commentBy: User
createdAt: Timestamp
updatedAt: Timestamp
version: Int
}
type Issue {
id: ID
requestId: ID
title: String
issueNumber: Int
status: Int
tags: [String]
assignees: [User]
createdBy: User
comments: [Comment]
createdAt: Timestamp
updatedAt: Timestamp
version: Int
}
input CreateIssueRequest {
requestId: ID!
title: String!
createdBy: ID!
message: String!
assignees: [ID]!
}
type IssueTrackerQuery {
ping: String!
}
type IssueTrackerMutation {
createIssue(request: CreateIssueRequest!): Issue
}
extend type Query {
IssueTracker: IssueTrackerQuery
}
extend type Mutation {
IssueTracker: IssueTrackerMutation
}
`;
以及上面 stackoverflow 答案的 lil 修改版本。 这是我的组合解析器。
// resolvers/resolvers.js
import IssueTracker from "./issueTracker";
export default {
Query: {
ping: () => "ping!",
IssueTracker: () => ({
ping: IssueTracker.ping,
}),
},
Mutation: {
ping: () => "ping!",
IssueTracker: () => ({
createIssue: IssueTracker.createIssue,
}),
},
};
这是因为我希望 Query 和 Mutation 完全分开。
这是我的 IssueTracker 解析器
// resolvers/issueTracker.js
export default {
ping: () => "ping",
createIssue: async (parent, args, context) => {
console.log(parent);
console.log(args);
console.log(context);
// create issue as per request and return
}
问题在于,parent 实际上是 args 字段!
而且我需要上下文中的 userId 来制作合理的数据。
【问题讨论】:
标签: javascript graphql apollo apollo-server express-graphql