zidZ
Convex Community2y ago
64 replies
zid

Clerk + Convex: Can't use fetch() in queries and mutations. Please consider using an action

Inside my convex folder, i have a mutation that is creating a user, and if this fails, I want to delete the user from Clerk.
I cant use useAction inside this context, so I tried importing it directly which is seemingly okay.



I'm using an action as logs suggested, but obviously i'm misunderstanding something.

// somewhere inside convex, inside a mutation
import { deleteClerkUser } from "./clerk";

  try {
    const userId = await createUser({
      db,
      identity,
    });
    return userId;
  } catch (error) {
    // if theres an error, delete clerk user
    console.log("clerk user id of deleting user", identity.subject);
    try {
      await deleteClerkUser({
        clerkUserId: identity.subject,
      });
    } catch (err) {
      console.log("deleteClerkUser", err);
      throw err;
    }
    console.log("createUser", error);
    throw error;
  }


// convex/clerk.js
"use node";
import { clerkClient } from "@clerk/nextjs/server";

export const deleteClerkUser = action({
  args: { clerkUserId: v.string() },
  handler: async ({ clerkUserId }) => {
    try {
      await clerkClient.users.deleteUser(clerkUserId);
    } catch (err) {
      console.error(err);
      return { success: false, error: err.message };
    }
  },
  get handler() {
    return this._handler;
  },
  set handler(value) {
    this._handler = value;
  },
});

Error message:
[
    {
      code: 'unexpected_error',
      message: 'Can\'t use fetch() in queries and mutations. Please consider using an action. See https://docs.convex.dev/functions/actions for more details.'
    }
  ]
Was this page helpful?