【问题标题】:Node Error - Using a domain property in MakeCallback is deprecated节点错误 - 在 MakeCallback 中使用域属性已被弃用
【发布时间】:2020-03-06 03:45:22
【问题描述】:

我在执行请求时收到此错误。

(节点:3993)[DEP0097] 弃用警告:不推荐在 MakeCallback 中使用域属性。请改用 MakeCallback 的 async_context 变体或 AsyncResource 类。

这是我的控制器的代码:AppointmentController 队列代码:Queue Nodemailer:Mail

async delete(req, res) {
    const { appointment_id } = req.params;

    if (!appointment_id) {
      return res.status(404).json({
        error: "It's not possible to cancel an appointment with passing an id",
      });
    }

    const appointment = await Appointment.findByPk(appointment_id, {
      include: [
        {
          model: Restaurant,
          as: 'restaurant',
          attributes: ['id', 'name', 'provider_id'],
          include: [
            {
              model: Provider,
              foreignKey: 'provider_id',
              as: 'provider',
            },
          ],
        },
        {
          model: User,
          as: 'user',
          attributes: ['id', 'name', 'email'],
        },
      ],
    });

    if (!appointment) {
      return res.status(404).json({ error: 'Appointment not found' });
    }

    if (appointment && appointment.canceled_at !== null) {
      return res
        .status(420)
        .json({ error: 'This appointment was already canceled' });
    }

    // The user can cancel only his/her appointments - Verifying if the id is different
    if (appointment.user_id !== req.userId) {
      return res.status(401).json({
        error: "You don't have permission to cancel this appointment",
      });
    }

    // It's just allowed to cancel appointments with 1 hour of advance
    const dateWithSub = subHours(appointment.date, 1);

    if (isBefore(dateWithSub, new Date())) {
      return res.status(401).json({
        error: 'You can only cancel appointments with 1 hour of advance',
      });
    }

    // Changing the field canceled_at with the current date
    appointment.canceled_at = new Date();
    await appointment.save();

    const formatedDate = format(
      appointment.date,
      "'Day' dd 'of' MMMM',' H:mm 'Hours'"
    );

    await Queue.add(CancellationMail.key, { appointment, formatedDate });
    return res.json(appointment);
  }
}

另外,我正在为电子邮件作业使用队列。 问题是,我不知道这个错误是与节点有关还是来自我正在使用的服务之一。

【问题讨论】:

标签: javascript node.js redis queue


【解决方案1】:

由于使用了deprecated domain module,正在发生弃用警告。

我没有看到您的代码直接使用它,因此我很确定您需要的软件包之一正在使用它。首先,我会检查您自己的代码以确保您没有使用它,如果没有,请确保您的所有依赖项都是最新的。

如果仍然无法解决,那么您需要找出警告的来源,最好的方法是在调试器中单步执行您的代码并查看出现此警告时的堆栈跟踪被发射。

【讨论】:

    【解决方案2】:

    找到其来源的一种简单方法是使用 --trace-deprecation 标志启动您的应用,这将打印指向使用已弃用模块的代码的堆栈跟踪。

    【讨论】:

    • 通过环境变量传递选项的另一种方法:NODE_OPTIONS=--trace-deprecation
    猜你喜欢
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多