Я использовал модуль mon goose для получения схемы, и все работает нормально, за исключением того, что он не распознает .findbycardinate как функцию. Где я go ошибся? сохранение в MongoDB работает и проверки также. Я потребовал пользователя. js на сервере. js и использовал findbyCardinate от пользователя. js на сервере. js, но он не распознается как функция. Точная ошибка: TypeError: user.findbyCardinate не является функцией.
const validator = require('validator')
const bcryptjs = require('bcryptjs')
const _ = require('lodash')
const jsonwebtoken = require('jsonwebtoken')
const {mongoose} = require('./../db/mongoose')
const developement=require('./../../config/developement.json')
const test=require('./../../config/test.json');
const con={
test,
developement
}
const env =process.env.NODE_ENV || 'developement';
const tokenObject={
type:String,
required:true
};
let UserSchema=new mongoose.Schema({
fullname:{
type: String,
required:true,
minlength:3,
trim:true
},
email:{
type:String,
trim:true,
minlength:6,
unique:true,
validate: {
validator: validator.isEmail,
message:'{Value} is not valid email'
}
},
password:{
type:String,
required:true,
minlength:6,
trim:true
},
tokens:[{
access:tokenObject,
token: tokenObject
}]
})
UserSchema.methods.toJSON=function(){
let user=this;
let userObject=user.toObject();
return _.pick(userObject,['_id','fullname','email'])
}
UserSchema.static.findbyCardinate=function(email,password){
let User=this;
return User.findOne({
email
}).then((user)=>{
if(!user){
return Promise.reject();
}
return new Promise((resolve,reject)=>{
bcryptjs.compare(password,user.password,(err,res)=>{
if(res){
resolve(user);
}
else{
reject();
}
})
})
})
}
if (env==="developement"){
UserSchema.methods.generateAuthToken= function(){
let user=this;
let access='auth';
let token = jsonwebtoken.sign({
_id: user._id.toHexString(),
access:access
},developement.jwtSecret).toString();
user.tokens.push({
access,
token
})
return user.save().then(()=>{
return token;
})
}
}
UserSchema.pre('save',function(next){
let user = this;
if(user.isModified('password')){
bcryptjs.genSalt(10,(err,salt)=>{
bcryptjs.hash(user.password,salt,(err,hash)=>{
user.password=hash;
next();
})
})
}
else{
next();
}
})
let user = mongoose.model('user',UserSchema);
module.exports={
user
}
Выше моя модель пользователя, а ниже мой сервер. js для выполнения кода.
const express = require('express');
const _ = require('lodash');
const env =process.env.NODE_ENV || 'developement';
const developement=require('../config/developement.json');
const test=require('../config/test.json');
const {user}=require('./model/user');
const con={
test,
developement
}
const app=express();
app.use(express.json());
app.post('/api/users',(req,res)=>{
const body=_.pick(req.body,['fullname','email','password']);
let User=new user(body);
User.save().then((user)=>{
res.status(200).send(user)
},(err)=>{
res.status(400).send(err)
})
})
app.post('/api/login',(req,res)=>{
const body=_.pick(req.body,['email','password']);
user.findbyCardinate( body.email,body.password).then((user)=>{
user.generateAuthToken().then((token)=>{
res.header('x-auth',token).status(200).send(token)
},(err)=>{
res.status(400).json({
Error:`${err}`
})
})
})
})
if (env==="developement"){
app.listen(con['developement'].PORT,()=>{
console.log(`Server is running on port ${con['developement'].PORT}`)
})
}
else if(server.env===process.env.NODE_ENV){
app.listen(con['test'].PORT)
}