首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对查询字符串执行GET请求?

如何对查询字符串执行GET请求?
EN

Stack Overflow用户
提问于 2021-04-07 23:59:32
回答 3查看 42关注 0票数 0

我有一个餐厅预订项目,当您输入查询字符串时,例如:http://localhost:5000/reservations?2020-12-31,它将返回当天给定的预订。

我正在使用Knex执行查询,我有第一个函数,它将返回数据库中的所有预订:

代码语言:javascript
运行
复制
const listReservations = () => knex('reservations').select('*');

然后,我尝试获取这些参数,并返回指定的预订:

代码语言:javascript
运行
复制
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 });
};

数据如下所示:

代码语言:javascript
运行
复制
[
  {
    "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请求?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-08 00:14:35

在Express中,您可以使用req.query访问url的查询参数(?之后的所有内容)。但是,只有在查询字符串格式正确的情况下,这才能起作用。它需要这样的格式:?field=value&foo=bar&date=2020-12-31

一旦你有了这样的查询格式的url,Express就可以解析它,你可以这样使用它:

代码语言:javascript
运行
复制
knex('reservations').where({ 'reservation_date': req.query.date })

这是推荐的解决方案(外加一些参数化重构,我将其作为练习留给读者)。但是如果不能更改查询字符串的格式,那么您可以在req.originalUrl上进行一些字符串处理,如下所示:

代码语言:javascript
运行
复制
const indexOfQs = req.originalUrl.indexOf('?')
const date = indexOfQs === -1 ? null : req.originalUrl.substr(indexOfQs + 1)
knex('reservations').where({ 'reservation_date': date })
票数 0
EN

Stack Overflow用户

发布于 2021-04-08 00:04:57

尝试这个查询:knex('reservations').where({'reservation_date':'2020-12-31'})。有关更多信息,请参阅knex documentation

票数 0
EN

Stack Overflow用户

发布于 2021-04-08 00:20:40

我不熟悉Knex,为了避免不必要地加载所有记录并在客户端进行过滤,我发现Wazeed的答案是正确的,但如果您尝试过滤,则可以简单地按reservation_date字符串进行过滤。请尝试以下示例

顺便说一句,在您分享的示例中,我不知道在本例中将查询字符串的值放在哪里2020-12-31

代码语言:javascript
运行
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66989777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档