【问题标题】:error: "User.findOne is not a function" in MERN错误:MERN 中的“User.findOne 不是函数”
【发布时间】:2020-07-24 03:26:21
【问题描述】:

所以我正在尝试在 MERN(MongoDB、Express、React、NodeJS)中使用护照构建身份验证系统。

我设置了一切,我用 NodeJS 连接反应,

问题是当我尝试登录或注册时,它显示我, 控制台中出现此错误“User.findOne 不是函数”,我试图通过查找任何 输入错误或谷歌,但我没有在网上找到任何东西。

有没有人遇到过类似的错误并修复它,或者有谁知道如何解决? 型号代码:

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

有人知道如何解决这个问题吗?

【问题讨论】:

  • module.exports = User insted of module.exports - User
  • 这是类型错误,非常感谢,请回答这个问题,以便我可以勾选正确。

标签: node.js reactjs express mongoose


【解决方案1】:

您的代码中只是一个简单的错误 替换为

 module.exports = User

 module.exports - User

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 2019-04-06
    • 2022-01-16
    • 2023-03-19
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多