Search code examples
node.jsmongoosenext.jsnext.js13

Why I see this error : No reponse is returned from route handler


import { connectDB } from "../../../lib/mongoose";
import { User, userValidation, loginValidation } from "../../models/User";
import { BadRequestError } from "../../../lib/ErrorHandler";
import asyncHandler from "../../../lib/asyncHandler";
import { NextResponse } from "next/server";
import { getDebugger } from "@/lib/debugger";
const debug = getDebugger("route");

export const POST = asyncHandler(async (req: Request) => {
  await connectDB(process.env.MONGODB_URI);
  const data = await req.json();
  const { email, firstName, lastName, password } = data;

  const { error } = userValidation.validate(data);
  if (error) throw new BadRequestError(error.details[0].message);
  const isEmailExist = await User.findOne({ email });
  if (isEmailExist) {
    throw new BadRequestError("email is already exist");
  }
  const user = new User({
    firstName,
    lastName,
    email,
    password,
  });

  await user.save();

  return NextResponse.json(
    {
      message: `Success Signing Up!`,
      success: true,
      user,
    },
    { status: 201 }
  );
});
import { getDebugger } from "./debugger";
import { NextResponse } from "next/server";

const debug = getDebugger("async-error");

const asyncHandler = (cb) => async (req) => {
  try {
    await cb(req);
  } catch (error) {
    const statusCode = error.statusCode || 500;
    const message = error.message || "Something went wrong";
    debug(`Error ${statusCode}: ${message}`);
    return NextResponse.json(
      {
        error: message,
      },
      { status: statusCode }
    );
  }
};

export default asyncHandler;

Why when I try to sign up new user, I get this error : ⨯ Error: No response is returned from route handler 'C:\Users\parse\Documents\task-rabbit-new\src\app\api\test\route.ts'. Ensure you return a Response or a NextResponse in all branches of your handler.

Also, even when I get this error I still see new users in my database. so what is going on here? thanks in advance to everyone


Solution

  • The issue seems to be that your asyncHandler isn't returning anything in the unexceptional case:

    const asyncHandler = (cb) => async (req) => {
      try {
        return await cb(req); // notice the insertion of the return keyword here
      } catch (error) {
        const statusCode = error.statusCode || 500;
        const message = error.message || "Something went wrong";
        debug(`Error ${statusCode}: ${message}`);
        return NextResponse.json(
          {
            error: message,
          },
          { status: statusCode }
        );
      }
    };
    

    So, to your point about the user being created, the work is being done but the results are not being propagated back to the client.