Node.js Mongoose静态函数未被调用

Node.js Mongoose static function not getting called

本文关键字:调用 静态函数 js Mongoose Node      更新时间:2023-09-26

最近我一直在尝试重写我的node.js express应用程序,使其更符合mvc原则。我也一直在尝试将猫鼬融入其中。我在猫鼬模型上调用静态函数时遇到了问题。

userSchema.statics.findDuplicates = function (cb) {
    console.log("Duplicates called");
    this.findOne({ email: this.email }, function(err, result){
        if (err) throw err;
        if (result) {
            cb("A user with this email has already been created.");
        } else {
            cb("");
        }
    });
}

现在的问题是,我稍后将使用这个模式导出一个模型,所以这些都包含在一个文件中:

module.exports = mongoose.model('User', userSchema);

当我后来在控制器内部调用这个时,(显然需要并提前启动模型(:

user.findDuplicates(function(result){
    if (result) {
        res.send("Selle e-mailiga kasutaja on juba loodud.");
        console.log("Duplicates");
    } else {
        user.save();
        res.send("Kasutaja loodud.");
        console.log("User created with password.")
    }
});

只是从来没有人叫它。Node告诉我它接受了一个帖子,但得到了一个500内部服务器错误,并且findDuplicates内部的"Duplicates-called"不会出现在控制台中。这里出了点问题,我不知道该怎么解决。

编辑:完整控制器代码:

var express = require('express');
var router = express.Router();
var User = require("../models/user.js");
router.get('/', function(req, res, next) {
    res.render('users',{title: "Lisa kasutaja"});
});
router.post('/', function(req, res, next) {
    var query = req.body;
    var message = "";
    console.log("Post recieved " + JSON.stringify(query));
    if (query.password != query.repeatPassword){
        res.send("Paroolid ei ole võrdsed.");
        console.log("Passwords don't match");
    } else {
        var user = new User({
            firstName: query.firstName,
            lastName: query.lastName,
            telephone: query.telephone,
            email: query.email,
            password: query.password
        });
        console.log("User created");
        user.findDuplicates(function(result){
            if (result) {
                res.send("Selle e-mailiga kasutaja on juba loodud.");
                console.log("Duplicates");
             } else {
                user.save();
                res.send("Kasutaja loodud.");
                console.log("User created with password.")
            }
        });
    }
});
module.exports = router;

您的问题在于在模型实例中调用静态方法,这是不正确的。请参阅以下差异:

// if you define a static method
userSchema.statics.findDuplicates = function (cb) {
  // do your stuff
}
// you call it this way
var User = require("../models/user.js");
User.findDuplicates(function (result) {
  // do your stuff
});
// if you define an instance method
userSchema.methods.findDuplicates = function (cb) {
  // do your stuff
};
// you call it this way (on an instance of your model)
var User = require("../models/user.js");
var user = new User({
      firstName: query.firstName,
      lastName: query.lastName,
      telephone: query.telephone,
      email: query.email,
      password: query.password
    });
user.findDuplicates(function (result) {
  // do your stuff
});