猫鼬模式静态与方法

时间:2018-06-26 08:47:36

标签: mongoose-schema

在猫鼬模式中,我们可以以两种方式创建该方法: SchemaName.methods.fuctionName SchemaName.statics.functionName 。 静态函数更易于使用,我只需要调用 ModelName.Fuction 。方法需要创建要使用的对象。我的问题是它们之间有什么不同。 静态方法的优缺点是什么?什么时候应该使用 statics 和什么时候应该使用 methods

// Users.js
UserSchema.statics.findUserStatics = async function(mail) {
    var findUser = await User.findOne({ mail: mail })
    return findUser
}

UserSchema.methods.findUserMethods = async function(mail) {
    var findUser = await User.findOne({ mail: mail })
    return findUser
}

// router.js

const { User } = require('./../models/Users')
router.post('/findbyStatics', async (req, res) => {
    try {
        var result = await User.findUserbyStatics(req.body.mail);
        res.status(200).send(result)
    } catch (e) {
        res.status(400).send(e.message)
    }
})

router.post('/findbyMethods', async (req, res) => {
    try {
        var user = new User()
        var result = await user.findUserbyMethods(req.body.mail);
        res.status(200).send(result)
    } catch (e) {
        res.status(400).send(e.message)
    }
})

1 个答案:

答案 0 :(得分:3)

静态对象包含与模型本身关联的功能,而不是与单个实例关联的功能。使用 statics 的优点是我们不需要访问类的实例即可访问与之关联的功能。例如:在上面的代码段中,您尝试搜索用户。您正确实现了 static 成员。如果使用了方法,则将需要实例化用户对象以搜索用户。 当您已经实例化了对象时,请使用方法;而在没有实例化对象时,请使用静态方法