typescript - 在我的 Controller 中使用模型中定义的实例方法

标签 typescript sequelize.js

我在尝试使用 Sequelize 和 Typescript 时遇到以下错误,这两个我都很陌生:

(node:17276) UnhandledPromiseRejectionWarning: TypeError: week.calculateDays is not a function    

我的 Controller 中有以下内容供我的路线使用:
import { Request, Response } from "express";
import models from "../models";

export class Weeks {
  public static calculateDays = async (req: Request, res: Response) => {
    console.log(req.params);
    await models.Week.findByPk(req.params.id).then(week => {
      if (week) {
        console.log("Week found:", week);
        week.calculateDays();
      }
    });
  };
}

并在模型中定义了以下内容:
import Sequelize from "sequelize";
import { SequelizeAttributes } from "../typings/SequelizeAttributes";
import { WeekAttributes } from "../interfaces/attributes";
import { WeekInstance } from "../interfaces/instances";
import models from "../models";
import { SessionAttributes } from "./sessions";

export const WeekFactory = (
  sequelize: Sequelize.Sequelize,
  DataTypes: Sequelize.DataTypes
): Sequelize.Model<WeekInstance, WeekAttributes> => {
  const attributes: SequelizeAttributes<WeekAttributes> = {
    ....attributes of the model....
  };

  const Week = sequelize.define<WeekInstance, WeekAttributes>(
    "weeks",
    attributes,
    {
      instanceMethods: {
        calculateDays: async function (this: WeekInstance) {
          console.log("Inside class method calculateDays");
          return await calculateDays(this.id!);
        }
      }
    }
  );

  const calculateDays = async (weekId: number) => {
      .......
  }
  return Week;
};

我真的很感激任何一种方向,因为我不确定我在这里错过了什么。

最佳答案

我相信问题在于您声明 calculateDays 方法的方式。这不应接收 WeekInstance 参数,您可以在函数内部正常使用 this。另外,我建议不要对 out 函数 calculateDays 使用相同的名称。我相信它无法从实例方法内部访问并且有点困惑,所以我将它重命名为 calculateDaysForWeek

instanceMethods: {
    calculateDays: async function () {
      console.log("Inside class method calculateDays");
      return await calculateDaysForWeek(this.id!);
    }
  }

关于如何创建实例方法的好引用:https://github.com/sequelize/sequelize/issues/9760

关于typescript - 在我的 Controller 中使用模型中定义的实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55922563/

相关文章:

typescript - TypeError : uuid_1. v5 不是函数

javascript - 在 Angular 6 中使用 JSON 进行过滤

express - TypeError : response. sendStatus 不是函数

mysql - 带有别名的 Sequelize 属性似乎未定义

javascript - "TypeError: Cannot read property ' 创建 ' of undefined"

node.js - nodejs session 只存储 json?

从第 n 个子级 2 到父级的 Angular 输出变量

javascript - typescript 无法推断自定义 Hook 中的解构数组类型

javascript - Angular 中输入和跨度之间的文本绑定(bind)

javascript - Sequelize 日期比较插入了错误的时间