我有一个餐厅预订项目,当您输入查询字符串时,例如:http://localhost:5000/reservations?2020-12-31,它将返回当天给定的预订。
我正在使用Knex执行查询,我有第一个函数,它将返回数据库中的所有预订:
const listReservations = () => knex('reservations').select('*');然后,我尝试获取这些参数,并返回指定的预订:
const list = async (req, res) => {
const response = await service.listReservations();
const data = response.filter((reserve) => {
return Date.parse(reserve.reservation_date) - Date.now() > 0;
});
console.log(data);
res.json({ data });
};数据如下所示:
[
{
"first_name": "Rick",
"last_name": "Sanchez",
"mobile_number": "202-555-0164",
"reservation_date": "2020-12-31",
"reservation_time": "20:00:00",
"people": 6,
"created_at": "2020-12-10T08:30:32.326Z",
"updated_at": "2020-12-10T08:30:32.326Z"
},
{
"first_name": "Frank",
"last_name": "Palicky",
"mobile_number": "202-555-0153",
"reservation_date": "2020-12-30",
"reservation_time": "20:00",
"people": 1,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
},
{
"first_name": "Bird",
"last_name": "Person",
"mobile_number": "808-555-0141",
"reservation_date": "2020-12-30",
"reservation_time": "18:00",
"people": 1,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
},
{
"first_name": "Tiger",
"last_name": "Lion",
"mobile_number": "808-555-0140",
"reservation_date": "2025-12-30",
"reservation_time": "18:00",
"people": 3,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
},
{
"first_name": "Anthony",
"last_name": "Charboneau",
"mobile_number": "620-646-8897",
"reservation_date": "2026-12-30",
"reservation_time": "18:00",
"people": 2,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
}
]如果我解析我的日期,减去今天的日期并返回大于0的日期,我得到: Tiger and Anthony。如果我返回0以下的值,我会得到前三个名字。
测试用例将作为查询字符串传入2020-12-31,并预期为Rick。如何执行给定查询字符串的GET请求?
发布于 2021-04-08 00:14:35
在Express中,您可以使用req.query访问url的查询参数(?之后的所有内容)。但是,只有在查询字符串格式正确的情况下,这才能起作用。它需要这样的格式:?field=value&foo=bar&date=2020-12-31。
一旦你有了这样的查询格式的url,Express就可以解析它,你可以这样使用它:
knex('reservations').where({ 'reservation_date': req.query.date })这是推荐的解决方案(外加一些参数化重构,我将其作为练习留给读者)。但是如果不能更改查询字符串的格式,那么您可以在req.originalUrl上进行一些字符串处理,如下所示:
const indexOfQs = req.originalUrl.indexOf('?')
const date = indexOfQs === -1 ? null : req.originalUrl.substr(indexOfQs + 1)
knex('reservations').where({ 'reservation_date': date })发布于 2021-04-08 00:04:57
尝试这个查询:knex('reservations').where({'reservation_date':'2020-12-31'})。有关更多信息,请参阅knex documentation。
发布于 2021-04-08 00:20:40
我不熟悉Knex,为了避免不必要地加载所有记录并在客户端进行过滤,我发现Wazeed的答案是正确的,但如果您尝试过滤,则可以简单地按reservation_date字符串进行过滤。请尝试以下示例
顺便说一句,在您分享的示例中,我不知道在本例中将查询字符串的值放在哪里2020-12-31
const data = [
{
"first_name": "Rick",
"last_name": "Sanchez",
"mobile_number": "202-555-0164",
"reservation_date": "2020-12-31",
"reservation_time": "20:00:00",
"people": 6,
"created_at": "2020-12-10T08:30:32.326Z",
"updated_at": "2020-12-10T08:30:32.326Z"
},
{
"first_name": "Frank",
"last_name": "Palicky",
"mobile_number": "202-555-0153",
"reservation_date": "2020-12-30",
"reservation_time": "20:00",
"people": 1,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
},
{
"first_name": "Bird",
"last_name": "Person",
"mobile_number": "808-555-0141",
"reservation_date": "2020-12-30",
"reservation_time": "18:00",
"people": 1,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
},
{
"first_name": "Tiger",
"last_name": "Lion",
"mobile_number": "808-555-0140",
"reservation_date": "2025-12-30",
"reservation_time": "18:00",
"people": 3,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
},
{
"first_name": "Anthony",
"last_name": "Charboneau",
"mobile_number": "620-646-8897",
"reservation_date": "2026-12-30",
"reservation_time": "18:00",
"people": 2,
"created_at": "2020-12-10T08:31:32.326Z",
"updated_at": "2020-12-10T08:31:32.326Z"
}
];
const output = data.filter(value => value.reservation_date === "2020-12-31");
console.log(output)
https://stackoverflow.com/questions/66989777
复制相似问题