Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 4143

Mongodb Javascript: BSON element "cursor" is missing on collection.findOne()

$
0
0

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


Viewing all articles
Browse latest Browse all 4143

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>