User.find不是函数猫鼬

时间:2019-10-25 01:11:16

标签: node.js mongodb express mongoose

我遇到一个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 个答案:

答案 0 :(得分:1)

使用以下代码,它将为您提供帮助

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);

答案 1 :(得分:0)

您以错误的方式要求模型。因为您是这样导出的:

module.exports.User = User

因此,您需要以这种方式要求它:

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

答案 2 :(得分:0)

我像波纹管一样导出用户模型

module.exports = User;