在猫鼬模式中,我们可以将方法创建为两种方式SchemaName.methods.fuctionName和SchemaName.statics.functionName。静态更容易使用我只需要调用ModelName.Fuction。方法需要创建对象才能使用。我的问题是它们之间有什么不同。静态和方法的优缺点是什么。什么时候应该使用静态,什么时候应该使用方法。
// 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)
}
})
Run Code Online (Sandbox Code Playgroud)
小智 6
该静态对象包含与该模型本身,而不是单个实例相关联的功能。使用静态的一个优点是我们不需要访问类的实例来访问与其关联的功能。例如:在上面的代码片段中,您尝试搜索用户。您正确实现了静态成员。如果您使用了一个方法,您将需要实例化一个用户对象来搜索用户。对象已经实例化时使用方法,不实例化时使用静态。