Mongoose .insertOne() 不工作(没有给出错误信息)

Mongoose .insertOne() not working (no error message given)

我正在使用 node.js 编写一个简单的登录/注册程序,该程序将帐户详细信息(用户名、电子邮件和密码)存储在 MongoDB 数据库中。我确定我已正确下载 MongoDB,但我无法弄清楚我的代码有什么问题...没有抛出任何错误,但 nameemail ,并且 hashedPassword 没有被插入到用户数据库中。

这是我的 server.js 文件中的代码:

if (process.env.NODE_ENV !== 'production') {
    require('dotenv').config()
  }
  
  const express = require('express')
  const app = express()
  const bcrypt = require('bcrypt')
  const passport = require('passport')
  const flash = require('express-flash')
  const session = require('express-session')
  const methodOverride = require('method-override')

  const userArray = [];

  const mongoose = require('mongoose')
  mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true })
  const db = mongoose.connection
  db.on('error', error => console.error(error))
  db.once('open', () => console.log('Connected to Mongoose'))
  
   const initializePassport = require('./passport-config')
  initializePassport(
    passport,
    email => users.find(user => user.email === email),
    id => users.find(user => user.id === id)
  )
  
  app.set('view-engine', 'ejs')
  app.use(express.urlencoded({ extended: false }))
  app.use(flash())
  app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false
  }))
  app.use(passport.initialize())
  app.use(passport.session())
  app.use(methodOverride('_method'))
  
  app.get('/', checkAuthenticated, (req, res) => {
    res.render('index.ejs', { name: req.user.name })
  })
  
  app.get('/login', checkNotAuthenticated, (req, res) => {
    res.render('login.ejs')
  })
  
  app.post('/login', checkNotAuthenticated, passport.authenticate('local', {
    successRedirect: '/',
    failureRedirect: '/login',
    failureFlash: true
  }))
  
  app.get('/register', checkNotAuthenticated, (req, res) => {
    res.render('register.ejs')
  })

//**THE PROBLEM IS SOMEWHERE HERE I THINK**
  app.post('/register', checkNotAuthenticated, async (req, res) => {
    console.log("Before try")
    try {
        const hashedPassword = await bcrypt.hash(req.body.password, 10)
        console.log("Password hashed")
        userArray.push({
            name: req.body.name,
            email: req.body.email,
            password: hashedPassword
          })
        console.log("pushed to array")
        db.users.insertOne({
            "name": req.body.name,
            "email": req.body.email,
            "password": hashedPassword
        })
        console.log("New user loaded to DB!")
        console.log(req.body.name);
        console.log(req.body.email);
        console.log(hashedPassword);
        res.redirect('/login')
      } catch {
        res.redirect('/register')
      }
  })
  
  
  app.delete('/logout', (req, res) => {
    req.logOut()
    res.redirect('/login')
  })
  
  function checkAuthenticated(req, res, next) {
    if (req.isAuthenticated()) {
      return next()
    }
  
    res.redirect('/login')
  }
  
  function checkNotAuthenticated(req, res, next) {
    if (req.isAuthenticated()) {
      return res.redirect('/')
    }
    next()
  }
  
  app.listen(3000)

我在 app.post('/register', checkNotAuthenticated, async (req, res) => {} 部分遇到了问题

我记录了它的每个步骤行,这是控制台中出现的内容:

[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Connected to Mongoose
Before try
Password hashed
pushed to array

因此,如您所见,除了将用户信息插入数据库外,一切正常(我也知道,因为 运行 db.users.find() 在 Mongo shell returns 什么都没有)...请帮忙:'(

将用户信息添加到用户数据库时出现语法错误。而不是:

db.users.insertOne({
            "name": req.body.name,
            "email": req.body.email,
            "password": hashedPassword
        })

应该是:

db.collection("users").insertOne({
            "name": req.body.name,
            "email": req.body.email,
            "password": hashedPassword
        })