首页 > 解决方案 > Express.js & Mongoose - 检查请求值是否在日期之间

问题描述

我正在尝试使用 Mongoose 制作 Express.js API。下面是在请求参数中接收日期并确定有关工作日的一些信息的路由代码。服务器应检查接收日期是否在数据库中保存的两个日期之间 (validFromvalidUntil)。我尝试在下面的代码中设置两个条件,但是使用测试值时不返回时间表。我测试了 API date 2020-09-02validFromvalue 是2020-08-31,validUntil 是2020-09-05

router.get("/:date", async (req, res) => {
  const errors = validationResult(req);

  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }

  try {
    const date = new Date(req.params.date);
    const week = getWeek(date) % 2 === 0 ? "parni" : "neparni"; // even or odd week
    const day = format(date, "eeee", { locale, weekStartsOn: 2 });

    let schedule = await Schedule.findOne({
      week: week,
      day: day,
      validFrom: {
        $lte: date.getDate(), // conditions
      },
      validUntil: {
        $gte: date.getDate(),
      },
    });

    if (!schedule) return res.json({ msg: "Not Found" });

    res.json(schedule);
  } catch (err) {
    console.error(err.message);
    res.status(500).send("Server error");
  }
});

有没有人有类似的比较数据库日期的案例?

标签: node.jsmongoose

解决方案


您的函数调用 date.getDate() 仅返回日期,因此不匹配。您应该能够只传递日期对象,但这取决于您如何在 mongo 中设置日期属性


推荐阅读