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
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.