表示 return next() 没有结束请求

Express return next() not ending the request

每当我发送请求时,我都会到达 .then() 块并在执行检查(得到确认)后,路由 returns 出现预期的错误。但是,该函数继续运行并将 createdAppointment 添加到数据库中。我试过只返回 next(),仅使用 next(error),但它一直给出相同的结果——它总是插入到数据库中。当然,我最后有错误中间件。

    async (err, client) => {
      if (err) {
        res.status(500).send("Failed Connection!");
        return;
      }

      const forename = req.body.professional.split(" ")[0];
      const surname = req.body.professional.split(" ")[1];
      const professional = await client
        .db("FYP")
        .collection("Users")
        .findOne({ forename: forename }, { surname: surname });

      if (!professional) {
        const error = new Error("Professional doesn't match with any in the database")
        error.code = 422
        return next(error)
      }

      if(professional.type != "Therapist") {
        const error = new Error("The chosen user is not a therapist.")
        error.code = 422
        return next(error)
      }

      const user = await client
        .db("FYP")
        .collection("Users")
        .findOne({ _id: res.locals.uid });

      const clientUserName = user.forename + " " + user.surname;
      const professionalUserName = professional.forename + " " + professional.surname

      await client
      .db("FYP")
      .collection("AppointmentsTherapists")
      .find({ client: clientUserName}, { complete: false})
      .toArray()
      .then(async data => {
          if(data) {
            console.log(data.length)
            for(let i=0; i<data.length; i++) {
              console.log(dateInPast(data[i].startTime))
            if(dateInPast(data[i].startTime) == false) {
              console.log(data[i]._id)
              const error = new Error("You already have a booked appointment with a therapist. Please attend the current appointment before booking another.")
                error.status = 422
                return next(error)
              }
          } 
        }
        
      })

      if (professionalUserName == clientUserName || user.type == "Therapist" || user.type == "Rehabilitator") {
        const error = new Error("A professional cannot book an appointment for themselves.")
        error.code = 422 
        return next(error)
      }

      const appointment = {
        client: clientUserName,
        professional: req.body.professional,
        information: req.body.information,
        startTime: req.body.startTime,
        endTime: req.body.endTime,
        status: "Pending",
        complete: false,
        date: new Date()
      };

      const createdAppointment = await client
        .db("FYP")
        .collection("AppointmentsTherapists")
        .insertOne({ ...appointment });

      res.status(200).send(createdAppointment);
      return next();
    }
);
});

  app.use((error, req, res, next) => {

  res.status(error.status || 500);
  res.json({
      message: error.message
  })
}) 

使用 async / await.then() 但不能同时使用...

  let data = await client
  .db("FYP")
  .collection("AppointmentsTherapists")
  .find({ client: clientUserName}, { complete: false})
  .toArray()
  if(data) {
    console.log(data.length)
    for(let i=0; i<data.length; i++) {
      console.log(dateInPast(data[i].startTime))
      if(dateInPast(data[i].startTime) == false) {
          console.log(data[i]._id)
          const error = new Error("You already have a booked appointment with a therapist. Please attend the current appointment before booking another.")
            error.status = 422
            return next(error)
        }
      } 
    }