Как мы можем использовать функцию stati c Schema в другом файле. js? - PullRequest
0 голосов
/ 01 марта 2020

Я использовал модуль 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...