我在 Typescript 中有一个函数,可以检查用户的电子邮件是否已经存在,并将其作为布尔值返回。问题是,每当请求通过 REST 客户端(Postman/Thunder 客户端)发送或通过单元测试执行时,该函数都会完美运行。但是,一旦客户端发送完全相同的请求,我就会收到以下错误:
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)
这是导致错误的函数:
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);
}
这是检查用户是否存在的代码:
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;
}
}
这是客户端代码,使用 Tanstack React Mutation 和 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']
});
}
});
}
最后,这是
PaginatedProvider
的抽象实现
import { Collection } from "mongodb";
export abstract class PaginatedProvider<T> {
limit = 10;
collection: Collection;
constructor(collection: Collection) {
this.collection = collection;
}
}
需要记住的一些注意事项:
非常感谢任何帮助
在哪里可以解决这个问题?我遇到了同样的错误并正在尝试解决...