我想在这篇文章的开头说,我在这里读了几篇关于这个问题的帖子.

我有一个node/express/mongo应用程序,包含以下内容:

应用程序.js:

    var express = require('express')
    var bodyParser = require('body-parser')
    var cors = require('cors')
    var morgan = require('morgan')
    var mongoose = require('mongoose')
    var passport = require('passport')

    var app = express()

    // MongoDB Setup
    var configDB = require('./config/database.js')
    mongoose.connect(configDB.url)

    app.use(morgan('combined'))
    app.use(bodyParser.json())
    // Check security with this
    app.use(cors())
     // load our routes and pass in our app and fully configured passport

    require('./routes')(app)
    app.listen(process.env.PORT || 8081)
    console.log('We are up and running, captain.')

路由.js

const AuthenticationController = require('./controllers/AuthenticationController')

module.exports = (app) => {
  app.post('/register', AuthenticationController.register)
}

我的mongo模式文件帐户.js:

const mongoose = require('mongoose')
const bcrypt = require('bcrypt-nodejs')
const Schema = mongoose.Schema

var accountSchema = new Schema({
  email: String,
  password: String,
  likesPerDay: { type: Number, min: 0, max: 250 },
  followPerDay: { type: Number, min: 0, max: 250 },
  unfollowPerDay: { type: Number, min: 0, max: 250 },
  commentsPerDay: { type: Number, min: 0, max: 250 },
  comment: String,
  hashtags: [String]
})

// methods ======================
// generating a hash. We hash password within user model, before it saves to DB.
accountSchema.methods.generateHash = function (password) {
  return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null)
}

// checking if password is valid
accountSchema.methods.validPassword = function (password) {
  return bcrypt.compareSync(password, this.local.password)
}

// create the model for users and expose it to our app
module.exports = mongoose.model('Account', accountSchema)

最后是我的控制器文件认证控制器.js

const Account = require('../models/Account.js')
// var bodyParser = require('body-parser')

module.exports = {
  register (req, res) {
    Account.findOne({email: req.body.id}, function (err, account) {
      if (err) {
        console.log('Could not regster user')
        throw err
      }
      if (account) {
        console.log('account already exists')
      } else {
        Account.insertOne({email: req.body.email, password: req.body.password}, function (err, res) {
          if (err) {
            console.log('could not insert')
            throw err
          }
          console.log('inserted account')
          Account.close()
        })
      }
    })
  }
}

当我调用Account.insertOne函数时,我的AuthenticationController文件中出现了一个错误.

我得到的错误是

类型错误:帐户.insertOne不是一个函数

现在,stack上的几个帖子建议我确保我正在从模型类导出模型,这将解决这个问题.这很奇怪,因为findOne法似乎很好,但当我调用insertOne时,我遇到了一个问题.

我错过什么了吗?

推荐答案

mongoose 模型没有insertOne方法.改用create法:

Account.create({email: req.body.email, password: req.body.password}, function (err, doc) {

Mongodb相关问答推荐

数组中字符串的Mongo查询集合和推送到新数组嵌套对象

为什么 mongoose 在 mongodb 中找不到我的数据

Mongo聚合的具体格式

Kotlin 使用初级构造实例化公开类

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

$lookup 的参数必须是字符串

在mongoose 中按键查找嵌套对象

MongoDB乘以对象值?

无法让 Mongoose.js 子文档数组填充

mongodb中集合的最大大小是多少

是否可以迭代 mongo 游标两次?

看起来当我执行 fs.writeFile() 时,更改的文件会重新启动 nodemon.怎么让它不重启?

Golang/mgo:如何让 MongoDB 在字段中使用当前时间?

.NET 中的 Mongodb 单元测试

使用管道聚合的 Spring Data MongoDB 查找

MongoDB:在集合上设置 TTL 索引时出错: sessions

带有 jQ​​uery Ajax/JSON 前端的 MongoDB 或 CouchDB 中间件

如何在 MongoDB 聚合查询中使用 $hint?

如何在 $match 内的 mongodb 聚合查询中使用 $regex

MongoDB打印两点之间的距离