我写了一个API,将服务和控制器分开。在我的服务函数中,我定义了简单的检查,如果遇到错误就会抛出错误。我的控制器函数现在为每个抛出的错误返回一个500的状态代码。有没有一种方法可以在使用我使用的逻辑抛出错误时指定HTTP代码?
控制器功能:
export const login = async (req: Request, res: Response) => {
const { email, password } = req.body;
try {
const { accessToken, refreshToken } = await loginUser(email, password);
res.cookie('jwt', refreshToken, { httpOnly: true, secure: true });
return res.status(200).json({ accessToken });
} catch (error) {
return res.status(500).json({ error });
}
};
服务功能:
export const loginUser = async (email: string, password: string) => {
if (!email || !password) {
throw new Error('All fields are required');
}
const user = await findUser(email);
if (!user) {
throw new Error('User does not exist');
}
const isValid = validPassword(password, user.password.salt, user.password.hash);
if (isValid) {
const { refreshToken, accessToken } = issueJWT(user._id);
return { refreshToken, accessToken };
} else {
throw new Error('You entered the wrong password');
}
};
1条答案
按热度按时间9q78igpj1#
您可以创建一个函数,该函数接受消息、statusCode和数据,并使用提供的信息创建一个错误,如下所示:
而且每次都可以调用:
而不是: