ошибка: «User.findOne не является функцией» в MERN - PullRequest
0 голосов
/ 11 апреля 2020

Итак, я пытаюсь построить систему аутентификации с использованием паспорта в MERN (MongoDB, Express, React, NodeJS).

Я все настроил, я подключился реагировать с NodeJS,

Проблема в том, что когда я пытаюсь войти в систему или зарегистрироваться, это показывает мне, эта ошибка "User.findOne не является функцией" в консоли, и я пытался ее исправить, ища какие-либо ошибки типа или Google это но я ничего не нашел в сети.

Кто-нибудь имел подобную ошибку и исправил ее, или кто-нибудь знает как? Код модели:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;


const UserSchema = new Schema ({

    password: String,
    email: String,

}, {
    collection: 'information'
})

const User = mongoose.model('information', UserSchema);

module.exports - User;


Код паспорта:

const Strategy = require('passport-local').Strategy
const mongoose = require('mongoose')
const User = require('../models/user');
const bcrypt = require('bcryptjs')

const salt = bcrypt.genSaltSync(10);

const SignupStrategy = new Strategy ({ passReqToCallback:true, usernameField: 'email' }, function(req, email, password, done){ 

    User.findOne({email: req.body.email}).lean().exec((err, user) => {
        if (err) {
            return done(err, null);
        }

        if (user) {
            return done("User already exist", null);
        }
        const encryptedPassword = bcrypt.hashSync(password, salt);
        let newUser = new User({
            email,
            password: encryptedPassword

        })

        newUser.save((error, inserted) => {
            if (error) {
                return done(error, null);
            }

            delete inserted.password;
            return done(null, inserted);

        })

    })

});

module.exports = SignupStrategy;

Узловой сервер:

const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const passport = require('./passport/');
const PORT = process.env.PORT || 8080;

const mongoose = require('mongoose');

//I have used password in mongo I just did <password> for security reasons.

const mongoString = mongoose.connect('mongodb+srv://herpryth:<password>@nowyourguest-ga5vy.gcp.mongodb.net/users?retryWrites=true&w=majority', {useNewUrlParser: true})


const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');


const app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use('/', indexRouter);
app.use('/authentication', usersRouter);
app.use(passport.initialize());
app.use(passport.session());

app.listen(process.env.PORT || 8080, process.env.IP || '0.0.0.0');

module.exports = app

Маршрут:

const express = require('express');
const app = express.Router();
const passport = require('../passport')

app.post('/signup', (req, res, next) =>{

  passport.authenticate('local-signup', function(error, user, info){

    if (error) {
      return res.status(500).json({

        message: error || 'Something happend',
        error : error.message || "Server error"

      });  
    }
    return res.json(user);
  })(req, res, next);

})

app.post('/signin', function(req, res, next){

  passport.authenticate('local-signin', function(error, user, info){

    if (error) {
      return res.status(500).json({

        message: error || 'Something happend',
        error : error.message || "Server error"

      });  
    }
    return res.json(user);
  })(req, res, next);

})

module.exports = app;

Сервер реагирования:

const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const passport = require('./passport/');
const PORT = process.env.PORT || 8080;

const mongoose = require('mongoose');

const mongoString = mongoose.connect('mongodb+srv://herpryth:XFXGJakc18wBJLIk@nowyourguest-ga5vy.gcp.mongodb.net/users?retryWrites=true&w=majority', {useNewUrlParser: true})


const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');


const app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use('/', indexRouter);
app.use('/authentication', usersRouter);
app.use(passport.initialize());
app.use(passport.session());

app.listen(process.env.PORT || 8080, process.env.IP || '0.0.0.0');


module.exports = app

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 11 апреля 2020

В вашем коде есть простая ошибка: замените

 module.exports = User

на

 module.exports - User
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...