创建之前无法在我的续集模型上使用

时间:2019-12-11 10:35:54

标签: node.js sequelize.js

在创建之前不适用于我的续集模型 我创建了一个模板,但是由于某种原因,之前创建的模板无法正常工作,我也不知道它可以是什么。

async createUser(req,res){
    const { name,email,login,password } = req.body
        const verify = await Users.findOne({where:{login: login}});

        if(verify){ return res.status(400).json({result: 'User already exists'})}

        const user = await Users.create({name,email,login,password});
}

型号:

class Users extends Model {
    static init(sequelize){
        super.init({
            name: DataTypes.STRING,
            email: DataTypes.STRING,
            login: DataTypes.STRING,
            password: DataTypes.STRING,
        }, {sequelize, tableName:'users'},
         {
            hooks: {
              beforeCreate: (user) => {
                console.log('ae');
              },

            },
        }
        )

请勿输入我之前的内容,也不要返回我的控制台。

1 个答案:

答案 0 :(得分:0)

您应该将hooks选项放在第二个对象参数中。 Model.init()界面是:

public static init<M extends Model = Model>(this: ModelCtor<M>, attributes: ModelAttributes, options: InitOptions<M>): void;

这是一个可行的示例:

import { sequelize } from '../../db';
import { Model, DataTypes } from 'sequelize';

class User extends Model {}
User.init(
  {
    name: DataTypes.STRING,
    email: DataTypes.STRING,
    login: DataTypes.STRING,
    password: DataTypes.STRING,
  },
  {
    sequelize,
    tableName: 'users',
    hooks: {
      beforeCreate: (user) => {
        console.log('======== ae ========');
      },
    },
  },
);

(async function test() {
  try {
    await sequelize.sync({ force: true });
    await User.create({ name: 'Alanna', email: 'example@gmail.com', login: 'value', password: '123' });
  } catch (error) {
    console.log(error);
  } finally {
    await sequelize.close();
  }
})();

执行结果:

======== ae ========
Executing (default): INSERT INTO "users" ("id","name","email","login","password") VALUES (DEFAULT,$1,$2,$3,$4) RETURNING *;

现在,beforeCreate模型的User钩子可以正常工作了。