apollographql / apollographql/graphql-subscriptions
Nest JS: Object is possibly 'undefined' in GraphQL
- Dominant language
- TypeScript
- Stars
- 1.6k
- Forks
- 129
- PR merge metrics
- No merged PRs in 30d
Description
I tried to make the **subscription update course** in the nest js, but it turns out error **Object is possibly 'undefined**' in this line of code `const course = await this.courseService.findOne({ id: variables.courseId }); `below is my course.resolver.ts
```
@Subscription('courseUpdated', {
resolve: (value) => value,
filter: async (payload, variables) => {
const course = await this.courseService.findOne({ id: variables.courseId });
if (!course) {
throw new NotFoundException('Course not found');
}
if (course.creatorId !== variables.userId) {
throw new ForbiddenException('Course not owned by you');
}
return payload.courseId === variables.courseId;
},
})
courseUpdated(
@Args('courseId') courseId: string,
@Args('userId') userId: string,
) {
return pubSub.asyncIterator(`course:${courseId}`);
}
```
Here is the piece of code in my course.graphql
```
type Course {
id: String
title: String
objective: [String!]
description: String!
language: String
category: String!
tone: String!
modality: String!
classSize: String!
topics: [String!]
duration: Int!
durationLesson: Int!
creatorId: String!
outline: CourseOutline
detailedOutline: CourseDetailedOutline
createdAt: DateTime!
updatedAt: DateTime!
audience: Audience!
}
input UpdateCourse {
title: String
objective: [String!]
description: String
language: String
category: String
tone: String
modality: String
classSize: String
topics: [String!]
duration: Int
durationLesson: Int
audience: CreateAudienceInput
outline: UpdateCourseOutline
detailedOutline: UpdateCourseDetailedOutline
}
type Subscription {
courseUpdated(courseId: String!): Course!
}
```
I read a lot on stackoverflow but still couldn't solve it. Yes indeed some of the value is optional, but how to solve it. I also tried the chaining option like this` const course = await this.courseService.findOne({ id: variables.courseId })?.id;` but still does not work
**System:**
```
"graphql-subscriptions": "2.0.0",
"@nestjs/cli": "^10.1.16",
"@nestjs/graphql": "^12.0.8"
```
Contributor guide
Research direction
Start by checking the reported TypeScript diagnostic in course.resolver.ts and comparing the subscription declaration in course.graphql with the shown NestJS code. Confirm whether the issue is reproducible in this repository; done means the undefined error is resolved and the courseUpdated subscription still behaves as intended.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- graphql, typescript
- Domain
- api
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100