我正在尝试在续集中设置一些控制器。 我希望能够进行不同类型的查询,例如:
api/hotels
api/hotels/id
api/hotels?featured=true
api/hotels?featured=true&limit=SOMEVALUE
api/hotels?featured=true&limit=SOMEVALUE&somethingsomething
我已经设法让功能和限制都工作,但是如果我没有包含限制,那么其余的都无法正常工作,因为限制将在我的后端服务器中设置为 0 :/
是否可以使其成为各种查询可选? 我可能会补充一点,这是我第一次运行sequelize并创建后端。
我的控制器看起来像这样:
export const getHotels = async (req, res, next) => {
try {
const { min, max, limit, ...others } = req.query;
const parsedLimit = limit ? Number(limit) : null;
const hotels = await Hotel.findAll({
where: {
...others,
// cheapestPrice: { $gt: min | 1, $lt: max | 100000 },
},
limit: Number(parsedLimit),
[Op.or]: {},
});
res.status(200).json(hotels);
} catch (err) {
next(err);
}
};
我可能会补充一点,最小值和最大值应该在最便宜的价格中使用,作为 api 的另一个查询。
提前致谢
您可以根据请求中是否存在相应的参数,有条件地将各种查询包含在 Sequelize 查询中,从而使各种查询成为可选。像这样的东西应该有效,
export const getHotels = async (req, res, next) => {
try {
const { min, max, limit, featured, somethingsomething } = req.query;
const whereClause = {};
// optional query parameters
if (min || max) {
whereClause.cheapestPrice = {
[Op.gt]: min || 1,
[Op.lt]: max || 100000,
};
}
if (featured) {
whereClause.featured = featured;
}
// you can add more optional parameters in a similar manner
const hotels = await Hotel.findAll({
where: whereClause,
limit: limit ? Number(limit) : null,
// include other options as needed
});
res.status(200).json(hotels);
} catch (err) {
next(err);
}
};