【发布时间】:2020-10-07 22:47:39
【问题描述】:
我在我的 sequelize 模型中编写了一个 BeforeCreate 钩子。当我点击创建用户路由时,它说 user.user_id 不能为空,甚至在创建钩子函数未执行之前。我遵循了 sequelize 的文档。他们提到的和我使用的一样。我在我的 sequelize 模型中编写了一个 BeforeCreate 钩子。当我点击创建用户路由时,它说 user.user_id 不能为空,甚至在创建钩子函数未执行之前。我遵循了 sequelize 的文档。他们提到的和我使用的一样。
const sequelize = require("kvell-db-plugin-sequelize").dbInstance;
const Sequelize = require("kvell-db-plugin-sequelize").dbLib;
const shortid = require("shortid");
const User = sequelize.define(
"user",
{
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false
},
user_id: {
type: Sequelize.STRING,
allowNull: false,
primaryKey: true,
unique: true
},
user_fname: {
type: Sequelize.STRING,
allowNull: false
},
user_lname: {
type: Sequelize.STRING,
allowNull: false
},
user_fullName: {
type: Sequelize.VIRTUAL,
get() {
return `${this.user_fname} ${this.user_lname}`;
},
set(value) {
throw new Error("Do not try to set the `fullName` value!");
}
},
user_email: {
type: Sequelize.STRING,
allowNull: false,
primaryKey: true,
validate: {
isEmail: true
},
unique: {
args: true,
msg: "Email address already in use!"
}
},
user_credential: {
type: Sequelize.STRING,
allowNull: false
},
user_roles: {
type: Sequelize.ARRAY(Sequelize.STRING),
allowNull: false,
defaultValue: ["Admin"]
},
admin: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true
},
user_img: {
type: Sequelize.STRING,
allowNull: true
}
},
{
timestamps: true
}
);
User.beforeCreate(async (user, options) => {
console.log("inside hooks");
let id = `user_${shortid.generate()}`;
user.user_id = id;
});
const toJSON = User.prototype.toJSON;
User.prototype.toJSON = function({ attributes = [] } = {}) {
const obj = toJSON.call(this);
if (!attributes.length) {
return obj;
}
return attributes.reduce((result, attribute) => {
result[attribute] = obj[attribute];
return result;
}, {});
};
module.exports = User;
【问题讨论】:
标签: node.js sequelize.js