node.js - 从 Controller 调用时,类方法 find My Mobile() 出现错误

标签 node.js sequelize.js class-method

我在用户模型中创建了许多函数,它们都是实例方法和类方法。但是当我从 Controller 调用类方法 findMyMobile() 时,它给出了“不是函数”错误。我尝试在 Controller 内显示它,但它似乎在那里未定义。

模型/用户.js

const { Sequelize, sequelize } = require('../db/sequelize');
const jwt = require('jsonwebtoken');

const Model = Sequelize.Model;

class User extends Model {}
User.init({
    id:{
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: {
        type: Sequelize.STRING,
        allowNull: false
    },
    mobile_number:{
        field:'mobile_number',
        type: Sequelize.BIGINT(10),
        unique:true,
        allowNull: false,
        is:/^[1-9]\d{9}$/g,
    },
    type:{
        type: Sequelize.ENUM('0','1','2'),
        allowNull: false,
        defaultValue: '1',

    },
    otp:{
        type: Sequelize.STRING,

    },
    createdAt: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW

    },
    updatedAt: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW
    }
},{ sequelize,
    modelName:'user',
    classMethods:{

        findByMobile: function(){
            var User = this;

            return User.findOne({'mobile_number':data['mobile_number']}).then(user => {

                return new Promise((resolve,reject)=>{
                    if(user)
                        resolve(user);
                    else
                        reject(new Error('No user found'));
                });

            }).catch(err=>{
                return Promise.reject(new Error('Database error'));
            })
        }
}
})

User.sync();

module.exports = {
    User
}

Controller /登录.js
const { User } = require('../model/user');
const _ = require('lodash');



exports.login = (req, res) => {
    const mobile = _.pick(req.body, ['mobile_number']);
    console.log(typeof User.findByMobile);
    User.findByMobile(mobile).then((user) => {
       console.log(user);

    }).catch(err => {
        var response = {
            status: 'failure',
            message: err.message
        }
        res.send(response);
    });

};

错误:
TypeError: User.findByMobile is not a function

最佳答案

由于 sequelize v4 classMethodsinstanceMethod 已从配置选项中删除:https://sequelize.org/v4/manual/tutorial/upgrade-to-v4.html#config-options

你有两种定义它们的方法

class User extends Model {
    //Class Method
    static findByMobile() {}
    //Instance Method
    findByMobile() {}
}

或者
class User extends Model { }
//Class Method
User.findByMobile = function() {}
//Instance Method
User.prototype.findByMobile = function() {}

关于node.js - 从 Controller 调用时,类方法 find My Mobile() 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61823409/

相关文章:

node.js - 如何在特定天数限制后从 winston 日志中删除文件?

node.js - sequelize.fn 不同的值没有给出条件的所有列

mysql - 如何将我的查询转换为 Sequelize 查询?

ruby-on-rails - 最好附加一个简单的函数作为类方法或模块?

Python设置docstring并获取动态生成的类方法的方法名称

objective-c - Objective-C 中的静态方法(不是类方法)

javascript - then() 在 Promise 之前完成

JavaScript : add a property dynamically not working

node.js - 当没有任何更改时,Sequelize 关联/模型突然无法识别,模糊错误无法读取未定义的属性 'field'

javascript - 无法使用 promise.all() 获得 promise 结果