Node.js Mongoose静态函数未被调用
Node.js Mongoose static function not getting called
最近我一直在尝试重写我的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
});
相关文章:
- 使用Google Visualization动态调用构造函数
- 在另一个函数成功结束后调用该函数
- 在调用Objective-C函数时将值返回到JavaScript
- 如何在视图模型contet更新更新上调用Jquery函数
- 使用html表单中的参数调用JavaScript函数
- 使用ajax用jquery调用php函数
- 在phonegap中为android调用onload函数的最佳方式
- 是否可以在使用headerphp函数后自动调用JS函数
- 在按钮上调用Javascript函数
- AngularJS和promise值在调用本地函数时的效果-未定义
- 仅在小型设备上调用jQuery函数
- Javascript,从静态函数中打印全局对象
- 可以't在Jasmine中调用Javascript函数
- 从构造函数es6调用静态方法
- JavaScript es6 从另一个类调用静态函数
- Node.js Mongoose静态函数未被调用
- Javascript类扩展:从子类函数调用基类函数:似乎在调用静态方法
- 如何在不指定模型名称的情况下从该模型的实例调用静态Backbone.Model函数
- 从静态函数调用非静态函数
- 从c#静态web方法(page方法)调用Javascript函数