您好,我遇到了一個問題,Object is possibly "null"可能是因為我通過 nodejs express 中的通用錯誤處理程式處理了此檢查。我該如何解決?
REST API
export const getOrderRaport = async (
req: Request<{}, {}, IAuthUser>,
res: Response,
next: NextFunction,
) => {
const orderId = req.query.orderId;
const order = await Order.findOne({ orderId: orderId });
if (!order) next(createError("Order does not exist"));
const orderUser = await User.findOne({ userId: order.userId });
const requestUser = await User.findOne({ userId: req.body.userId });
if (!orderUser) next(createError("Order was not found for the specified user"));
if (!requestUser) next(createError("You are not allowed to view this order"));
if (orderUser._id != requestUser._id) {
}
};
錯誤處理程式
app.use((error: CustomError, req: Request, res: Response, next: NextFunction) => {
const status = error.status || 500;
const message = error.message || 'Something went wrong';
res.status(status).json({message});
});
uj5u.com熱心網友回復:
“保護檢查”或保護子句應盡早退出函式/塊,以便執行不會進入下一行。這可以使用returnor throw(或continue/ breakin 回圈)來完成。
if (!order) next(createError("Order does not exist"));
應該:
if (!order) return next(createError("Order does not exist"));
next()從getOrderRaport()(包裝在承諾中)回傳結果。
或者:
if (!order) {
next(createError("Order does not exist"));
return;
}
undefined作為承諾結果回傳。
getOrderRaport()或者,您可以通過拋出錯誤來拒絕回傳的承諾,這也會停止執行函式中的任何其他行。
if (!order) {
next(createError("Order does not exist"));
throw new Error("Order does not exist");
}
這同樣適用于orderUser和requestUser。除非您在這些變數為null.
if (orderUser._id != requestUser._id) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/514949.html
上一篇:創建只需要指定欄位的型別
