Reputation: 35
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
Upvotes: 0
Views: 696
Reputation: 10379
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.
Upvotes: 0