.save () n'est pas une fonction Mongoose
Je reçois un problème qui newUser.save() n'est pas une fonction. C'est une mangouste fonction que j'ai utilisé avant. Je mangouste correctement et ne suis pas sûr de pourquoi cette erreur se produit. Toute aide est la bienvenue.
L'erreur que je reçois est TypeError: newUser.save is not a function
Mon user.js à l'intérieur du Dossier de Modèles
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);
});
}
Mon users.js à l'intérieur de la Routes Dossier
//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;
source d'informationauteur That Guy
Vous devez vous connecter pour publier un commentaire.
createUser()
est une fonction régulière que vous êtes de passage régulier d'un objet (comme lenewUser
argument):Les objets ordinaires n'ont pas
.save
méthode.Ce que vous probablement veux, c'est créer un méthode statique dans le cadre de votre modèle. Qui vous permettent d'appeler
User.createUser
comme vous le faites maintenant (remarquez comment les méthodes statiques sont créés sur le schémapas la modèle. Aussi, vous devez définir les méthodes statiques avant de créer un modèle à partir du schéma)Vous avez quelques choses de mal ici.
Quelque chose comme ceci (l'Utilisateur se réfère à votre schéma):
devrait mieux fonctionner. Au lieu de passer un nouvel objet (qui, évidemment, ne contient pas la méthode save), vous êtes en train de créer un nouvel objet à partir du schéma, le réglage des paramètres, et de l'enregistrer.
- Vous aussi d'avoir à changer à cela:
C'est un crochet, qui est appelée à chaque fois avant que l'utilisateur est enregistré.