Javascript 续集模型方法“;这";问题

Javascript 续集模型方法“;这";问题,javascript,database,postgresql,sequelize.js,Javascript,Database,Postgresql,Sequelize.js,我在sequelize中遇到了用户JWT的问题,因为我需要创建一个模型方法,然后在我想要执行验证时应用这个模型方法 问题是,当我尝试使用“this”时,返回的是“user” 有人能给我解释一下原因和一些可能的解决方法吗?泰 const { DataTypes } = require('sequelize') const sequelize = require('../sequelize/db') const bcrypt = require('bcryptjs') const jwt = req

我在sequelize中遇到了用户JWT的问题,因为我需要创建一个模型方法,然后在我想要执行验证时应用这个模型方法

问题是,当我尝试使用“this”时,返回的是“user”

有人能给我解释一下原因和一些可能的解决方法吗?泰

const { DataTypes } = require('sequelize')
const sequelize = require('../sequelize/db')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')

const User = sequelize.define('user', {
    id: {
        type: DataTypes.STRING,
        allowNull: false,
        primaryKey: true
    },
    name: {
        type: DataTypes.STRING,
        require: true,
        allowNull: false,
        unique: true,
        validate: {
            len: [4, 12]
        }
    },
    password: {
        type: DataTypes.STRING,
        require: true,
        allowNull: false,
        validate: {
            len: {
                args: [6, 12],
                msg: 'password between 6 and 12 characters'
            },
            async set(password) {
                this.setDataValue('password', await bcrypt.hash(password, 8))
            }
        }
    },
    email: {
        type: DataTypes.STRING,
        require: true,
        allowNull: false,
        unique: true,
        validate: {
            isEmail: true
        }
    },
    avatar: {
        type: DataTypes.BLOB,
    },
    profile: {
        type: DataTypes.TEXT
    }
})

User.genAuthToken = async function () {
    const user = this
    const token = jwt.sign({ _id: user.id }, 'qweasd', { expiresIn: '7 days' })
    return token
}

const a = async () => {
    await User.create({
        id: 'asdd',
        name: 'nishia',
        email: 'emaia@am.me',
        password: 'asdasd'
    })
    const token = await User.genAuthToken()
}

a()

您需要的是实例方法而不是类(静态)方法:


您需要的是实例方法而不是类(静态)方法:


给你一个大大的拥抱,兄弟。谢谢你救了我。我已经离开了这个项目,因为我想不出来。我很难通过文档学习续集。这完全挽救了我的项目。感谢您提供的名称,以便我可以搜索的条款!给你一个大大的拥抱,兄弟。谢谢你救了我。我已经离开了这个项目,因为我想不出来。我很难通过文档学习续集。这完全挽救了我的项目。感谢您提供的名称,以便我可以搜索的条款!
User.prototype.genAuthToken = async function () {
    const user = this
    const token = jwt.sign({ _id: user.id }, 'qweasd', { expiresIn: '7 days' })
    return token
}
...
const a = async () => {
    const newUser = await User.create({
        id: 'asdd',
        name: 'nishia',
        email: 'emaia@am.me',
        password: 'asdasd'
    })
    const token = await newUser.genAuthToken()
}