gpt4 book ai didi

node.js - 无法从 Controller 调用 Sequelize 模型自定义函数

转载 作者:行者123 更新时间:2023-12-03 22:36:17 27 4
gpt4 key购买 nike

我有一个这样的自定义函数的 Sequelize 模型:

'use strict';
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const config = require('../../config');

module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.STRING,
primaryKey: true
},
name: DataTypes.STRING,
email: DataTypes.STRING,
bio: DataTypes.STRING,
phone: DataTypes.STRING,
username: DataTypes.STRING,
password: {
type: DataTypes.STRING,
set(value){
this.setDataValue('password', bcrypt.hashSync(value, 10));
}
}
}, {});

User.generateJWT = function(id, username) {
return jwt.sign({
id: id,
username: username,
expiresIn: config.auth.exp
}, config.secret);
};

User.toAuthJson = async function() {
return {
name: this.name,
email: this.email,
bio: this.bio,
phone: this.phone,
username: this.username
};
};

User.validatePassword = function(password, passwordHash){
return bcrypt.compareSync(password, passwordHash);
};

User.isUniqueEmail = async function(email) {
return await User.findOne({where: {email}}) === null;
};

User.isUniqueUsername = async function(username) {
return await User.findOne({where: {username}}) === null;
};

User.isUniquePhone = async function(phone) {
return await User.findOne({where: {phone}}) === null;
};
User.associate = function(models) {
// associations can be defined here
};
return User;
};

和这样的 Controller :
const {User} = require('../database/models/');

module.exports.register = async (req, res, next) => {
try {
const isUniqueEmail = await User.isUniqueEmail(req.body.email);
if (!isUniqueEmail) return res.status(422).json({'message': 'email already exists'});

const isUniquePhone = await User.isUniquePhone(req.body.phone);
if (!isUniquePhone) return res.status(422).json({'message': 'phone already exists'});

const isUniqueUsername = await User.isUniqueUsername(req.body.username);
if (!isUniqueUsername) return res.status(422).json({'message': 'username already exists'});

const user = await User.create(req.body);
console.log(user.toAuthJson()); //an error occurs here
return res.status(201).json({user: user.toAuthJson()});
}catch (e) {
next(e);
}
};

当我尝试从这个 Controller 访问 toAuthJson 函数时,比如这个 user.toAuthJson。 “注意小你。”它抛出一个错误 TypeError: User.toAuthJson is not a function。我应该可以正常访问它。帮助。谢谢

最佳答案

User.toAuthJson当前是一个类方法。与其他函数一样,您需要将其称为 User.toAuthJson(user) .

你可能正在寻找一个实例方法,所以你想在原型(prototype)中定义它:

User.prototype.toAuthJson = function() {
return {
name: this.name,
email: this.email,
bio: this.bio,
phone: this.phone,
username: this.username
};
};

现在您可以调用 User例如,就像您尝试做的那样:
console.log(user.toAuthJson());

另请注意,我省略了 async因为这个函数不做任何异步的事情。

关于node.js - 无法从 Controller 调用 Sequelize 模型自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com