我一直收到一个新用户的问题.save()不是一个函数.这是我以前使用过的mongoose函数.我要求mongoose 正确,不确定为什么会发生这种错误.欢迎任何帮助.

我得到的错误是TypeError: newUser.save is not a function

My user.js inside the Models Folder

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
  name: String,
  email: String,
  password: String,
  info: String
});

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

module.exports.createUser = function(newUser, callback){
    bcrypt.genSalt(10, function(err, salt) {
        bcrypt.hash(newUser.password, salt, function(err, hash) {
            newUser.password = hash;
            newUser.save(callback);
        });
    });
}

module.exports.getUserByUsername = function(username, callback){
    User.findOne({username : username}, callback);
}

module.exports.getUserById = function(id, callback){
    User.findById(id, callback);
}

module.exports.checkPassword = function(candidatePass, hash, callback){
  bcrypt.compare(candidatePass, hash, function(err, res) {
    if(err) throw err;
    callback(null, res);
  });
}

My users.js inside the Routes Folder

//Mongoose Setup
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect("MY_DB");
var path = require('path');
var appDir = path.dirname(require.main.filename);
var bodyParser = require('body-parser')
var User = require('../models/user.js');

//Express Setup
var express = require('express');
var router = express.Router();
var app = express();
var expressValidator = require("express-validator");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());
app.use(bodyParser.json());

//Routes
router.get('/register', function(req, res){
  res.sendFile(appDir + "/views/register.html");
})

router.post('/register', function(req, res) {
  req.check('name', 'Name must be Filled in').notEmpty();
  req.check('email', 'Email must be Filled in').notEmpty();
  req.check('email', "Invalid Email").isEmail();
  req.check('password', 'Password Field must be Filled in').notEmpty();
  req.check('password', 'Passwords do not Match').equals(req.body.password2)
  var errors = req.validationErrors();
  if(errors) res.send(errors)
  else{ User.createUser({
    name: req.body.name,
    email: req.body.email,
    password: req.body.password,
    info: req.body.user_bio
  }, function(){
    console.log('User Created');
  })
}
})

//Exports
module.exports = router;

推荐答案

createUser()是一个常规函数,您将一个常规对象(作为newUser参数)传递给:

User.createUser({
  name : req.body.name,
  ...
}, ...);

常规对象没有.save方法.

你想要的是在你的模型中创建一个static method.这将允许您像现在这样调用User.createUser(注意静态方法是如何在schema而不是model上创建的.此外,您必须定义静态方法before,从模式创建模型)

Mongodb相关问答推荐

$mod只支持数字类型,不支持MongoDb中的array和int

MongoDB聚合:将文档列表转换为列表

为什么 mongoose 在 mongodb 中找不到我的数据

无法配置数据源:未指定url属性,无法为 MongoDb 配置嵌入数据源

使用 multer 在我的 MERN 前端显示 MongoDB 图像的正确语法是什么?

spring-data-mongodb 上的 TopN 聚合

嵌套数组 $unwind 和 $group 在 mongoDB 中重新组合在一起

MongoDB 支持的最 Big Data 库数

聚合/元素子文档作为 mongo 中的顶级文档

MongoDB .NET 未在 upsert 上生成 _id

什么 Javascript 库可以针对对象判断类似 MongoDB 的查询谓词?

使用 nodejs/mongoose 部分更新子文档

django 和 mongodb 是否使迁移成为过go ?

Mongoose 的保存回调是如何工作的?

MongoDB:自动生成的 ID 为零

Mongo:无法在 src/mongo/shell/mongo.js:145 连接到服务器 127.0.0.1:27017

Python Django-REST-framework 和 Angularjs 的文件夹 struct

mongoose 使用 $cond 中的 $exists 聚合

停止副本集 MongoDB

是否可以使用聚合框架对 MongoDB 中的 2 个字段求和?