apollographql / apollographql/graphql-subscriptions

Nest JS: Object is possibly 'undefined' in GraphQL

Open
#265 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.