User.find не является функцией мангуста - PullRequest
0 голосов
/ 25 октября 2019

Я получаю ошибку User.find is not a function. Я считаю, что все настроил правильно, но, видимо, нет.

Вот моя модель, а также другие фрагменты кода.

модель пользователя

const mongoose = require('mongoose')

let userSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true
  },
  password: {
    type: String,
    required: true
  }
})

const User = mongoose.model("user", userSchema)
module.exports.User = User

маршруты пользователей

const express = require('express')
const router = express.Router()
const mongoose = require('mongoose')

const User = require('../models/user')

/* GET users listing. */
router.get('/', (req, res) => {
  User.find()
    .then(function(users) {
      res.status(201).json(users)
    })
    .catch(function(err) {
      console.error(err)
      res.status(500).send('Eorror ' + err)
    })
})

module.exports = router

app.js

const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const cors = require('cors');
const mongoose = require('mongoose');

// connect database
mongoose.connect('mongodb://localhost/<removed>', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex: true
});
console.log(mongoose.connection.readyState);

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

const app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

app.use(cors());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Когда я запускаю приложение, я получаю состояние готовности 2, поэтому оно подключается. Так что не знаю, где я ошибаюсь.

Я пытаюсь сохранить соединение БД с одним файлом, где все приложение может использовать БД, где это необходимо. Эта часть предназначена только для API, поэтому представления и т. Д. Не важны.

Ответы [ 3 ]

2 голосов
/ 25 октября 2019

Используйте код ниже, это поможет вам

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let userSchema = Schema({
  email: {
    type: String,
    unique: true,
    required: true
  },
  password: {
    type: String,
    required: true  
}, {
        versionKey: false
    });
module.exports = mongoose.model('user', userSchema);
0 голосов
/ 25 октября 2019

Я пользовательская модель экспорта, как показано ниже

module.exports = User;
0 голосов
/ 25 октября 2019

Вы нуждаетесь в вашей модели неправильно. Потому что вы экспортируете это так:

module.exports.User = User

Так что вам нужно сделать это следующим образом:

const { User } = require('../models/user')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...