Ich habe dieses Mongoose Schema in einer NodeJS Anwendung:Warum kann ich nicht auf die Methode eines Mungoschemas zugreifen?
const mongoose = require('mongoose'),
Schema = mongoose.Schema,
sodium = require('sodium').api;
const UserSchema = new Schema({
username: {
type: String,
required: true,
index: { unique: true }
},
salt: {
type: String,
required: false
},
password: {
type: String,
required: true
}
});
UserSchema.methods.comparePassword = function(candidatePassword, targetUser) {
let saltedCandidate = candidatePassword + targetUser.salt;
if (sodium.crypto_pwhash_str_verify(saltedCandidate, targetUser.password)) {
return true;
};
return false;
};
module.exports = mongoose.model('User', UserSchema);
Und Ich habe diese Routen-Datei.
const _ = require('lodash');
const User = require('../models/user.js'); // yes, this is the correct location
module.exports = function(app) {
app.post('/user/isvalid', function(req, res) {
User.find({ username: req.body.username }, function(err, user) {
if (err) {
res.json({ info: 'that user name or password is invalid. Maybe both.' });
};
if (user) {
if (User.comparePassword(req.body.password, user)) {
// user login
res.json({ info: 'login successful' });
};
// login fail
res.json({ info: 'that user name or password is invalid Maybe both.' });
} else {
res.json({ info: 'that user name or password is invalid. Maybe both.' });
};
});
});
};
Ich benutze Postman dann einen Anruf zu 127.0.0.1:3001/user/isvalid
mit einem entsprechenden Körper Inhalt zu machen. Das Terminal sagt mir TypeError: User.comparePassword is not a function
und stürzt die App ab.
Da das if (user)
Bit übergibt, bedeutet das für mich, dass ich ein Dokument von Mongo ordnungsgemäß abgerufen habe und eine Instanz des Benutzerschemas habe. Warum ist die Methode nicht gültig?
eta: Das Modul Export Ich kopiere fehlgeschlagen/Paste ursprünglich
Hinzufügen von Benutzermodell-Modul beenden: 'module.exports = mongoose.model ('User', UserSchema);' – dNitro
@ dNitro ich konnte das nicht kopieren/einfügen, aber es ist in meinem tatsächlichen Code. Guter Fang. Bearbeiten, um es hinzuzufügen –