I have a function in Typescript that checks if the user's email already exist, and returns it as a boolean value. The catch is that whenever the request gets sent via a REST Client ( Postman/ Thunder Client) Or it is executed via unit test, the function runs perfectly. However, as soon as the client sends the exact same request, I get the following error:
MongoUnexpectedServerResponseError: BSON element "cursor" is missing at CursorResponse.get (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\responses.ts:88:13) at CursorResponse.get cursor [as cursor] (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\responses.ts:216:17) ... 6 lines matching cause stack trace ... at async FindCursor.next (C:\Repositories\UAI-express\node_modules\mongodb\src\cursor\abstract_cursor.ts:398:7) at async Collection.findOne (C:\Repositories\UAI-express\node_modules\mongodb\src\collection.ts:506:17) { [Symbol(errorLabels)]: Set(0) {}, [cause]: BSONError: BSON element "cursor" is missing at CursorResponse.get (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\on_demand\document.ts:275:15) at CursorResponse.get (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\responses.ts:86:20) at CursorResponse.get cursor [as cursor] (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\responses.ts:216:17) at CursorResponse.get batch [as batch] (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\responses.ts:254:25) at CursorResponse.get batchSize [as batchSize] (C:\Repositories\UAI-express\node_modules\mongodb\src\cmap\wire_protocol\responses.ts:262:17) at FindCursor._initialize (C:\Repositories\UAI-express\node_modules\mongodb\src\cursor\find_cursor.ts:75:33) at processTicksAndRejections (node:internal/process/task_queues:95:5) at async FindCursor.cursorInit (C:\Repositories\UAI-express\node_modules\mongodb\src\cursor\abstract_cursor.ts:684:21) at async FindCursor.fetchBatch (C:\Repositories\UAI-express\node_modules\mongodb\src\cursor\abstract_cursor.ts:720:7) at async FindCursor.next (C:\Repositories\UAI-express\node_modules\mongodb\src\cursor\abstract_cursor.ts:398:7)
Here's the function that causes the error:
function createUser(req: Request, res: Response) { const body = req.body;const db = await connectToDb(); const userProvider = new UserProvider(db); const userExists = await userProvider.userExists(body.email); if (userExists) { return res.status(400).send("User already exists"); } const result = await userProvider.createUser(body); return res.json(result);}
Here's the code that checks if users exists:
class UserProvider { constructor(db: Db) { super(db.collection('dashboard_users')); } async userExists(email: string): Promise<boolean> { const user = await this.collection.findOne({ email }, {}); return !!user; }}
Here's the client code, using Tanstack React Mutation and axios
type UserMutationFn = (data: any) => Promise<any>;export const createAdminUser: UserMutationFn = async (data: any) => secureAPIPOST(`/users/admin`, data);export const createUser: UserMutationFn = async (data: any) => secureAPIPOST(`/users`, data);export const deleteUser: UserMutationFn = async (data: any) => secureAPIDELETE(`/users`, null, data);export const updateUser: UserMutationFn = async (data: any) => secureAPIPOST(`/users`, data);export default function useUserMutation(mutationFn: UserMutationFn) { const queryClient = useQueryClient(); return useMutation({ mutationFn, onError: (error) => { console.error(error); }, onSuccess: () => { // invalidate dashboard users query queryClient.invalidateQueries({ queryKey: ['dashboard-users'] }); } });}
And lastly, here's the abstract implemetnation of PaginatedProvider
import { Collection } from "mongodb";export abstract class PaginatedProvider<T> { limit = 10; collection: Collection; constructor(collection: Collection) { this.collection = collection; }}
A few notes to keep in mind:
- This is not the only provider, every other provider that I have created works perfeclty
- This function also runs with no issues when called from a client
- No CORS-related issues have been spotted
- I could not find any documentation for this specific error
Any help is greatly appreciated