#node.js #typescript
Вопрос:
Получен запрос, который выводит список продуктов из БД по категориям и полу с помощью запросов. Я хочу, чтобы запрос работал только с категорией или полом.
Вот внутренний контроллер —
const getProducts = async (
req: IgetProductsRequest,
res: IgetProductsResponse
) => {
ServerGlobal.getInstance().logger.info(
`<getProducts>: Start processing request filtered by
category ${req.query.category} and gender ${req.query.gender}`
);
if (!ServerGlobal.getInstance().isValidCategoryValue( req.query.category!) amp;amp; !ServerGlobal.getInstance().isValidGenderValue( req.query.gender!)) {
ServerGlobal.getInstance().logger.error(
`<getProducts>: Failed to get products because of invalid gender and category filtered by category ${req.query.category}
and gender ${req.query.gender}`
);
res.status(400).send({
success: false,
message: "Please provide valid gender and category",
});
return;
}
try {
const products = await ProductDB.find({
category: req.query.category!,
gender: req.query.gender!,
});
ServerGlobal.getInstance().logger.info(
`<getProducts>: Successfully got the products filtered by
category ${req.query.category} and gender ${req.query.gender}`
);
res.status(200).send({
success: true,
message: "Successfully retrieved products",
data: products.map((product) => ({
id: product.id as string,
category: {
value: product.category,
label: ServerGlobal.getInstance().getCategoryLabel(product.category)!,
},
gender: {
value: product.gender,
label: ServerGlobal.getInstance().getGenderLabel(product.gender)!,
},
title: product.title,
description: product.description,
price: product.price,
imageFileName: product.imageFileName,
})),
});
return;
} catch (e) {
ServerGlobal.getInstance().logger.error(
`<getProducts>: Failed to get products filtered by
category ${req.query.category} and gender ${req.query.gender} because of server error: ${e}`
);
res.status(500).send({
success: false,
message: "Server error",
});
return;
}
};
IgetProductsRequest
—
interface IgetProductsRequest extends express.Request {
readonly query: Readonly<{
gender?: string;
category?: string;
}>;
}
Если я использую — http://localhost:3000/product/list?gender=2amp;category=1
это хорошо работает.
Но когда я пытаюсь отправить, например, — http://localhost:3000/product/list?gender=2
я получаю ошибку, потому что отправляю категорию=не определено.
Что я могу сделать, чтобы сделать контроллер динамичным только для категории пола?