在猫鼬模式中,我们可以以两种方式创建该方法: 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)
}
})
答案 0 :(得分:3)
静态对象包含与模型本身关联的功能,而不是与单个实例关联的功能。使用 statics 的优点是我们不需要访问类的实例即可访问与之关联的功能。例如:在上面的代码段中,您尝试搜索用户。您正确实现了 static 成员。如果使用了方法,则将需要实例化用户对象以搜索用户。 当您已经实例化了对象时,请使用方法;而在没有实例化对象时,请使用静态方法。