Skip to content

60.[半夜改bug] mongoose 的 createConnection 和 connect #65

@ccforward

Description

@ccforward

[半夜改bug] mongoose 的 createConnection 和 connect

代码出 bug 大半夜的被 mongoose 的连接函数搞惨

因为代码里 mongo 数据库的连接方式的代码被改成了 const db = mongoose.createConnection(mongo.url(), mongoOptions),所以在调用数据插入函数时 Promise 的 resolve 和 reject 都没有返回,也没有打印任何异常信息。

查了业务逻辑、本地 mongo 的读写都没问题,最后发现是 mongo 的连接文件 connect.js 被修改了。

因为用了 mongoose.createConnection 所以此时的 model 应该是 db.mongoose.model('Product')

而之前的是用默认的 mongoose.connect() 方式连接的数据库,获取 model 的代码也应该是 const ProductModel = db.mongoose.model('Product', ProductSchema)

数据库的链接方式被改了,model 没有变,所以增删改查的代码一直被挂起,没有任何的返回。😂😂😂

API和示例代码

Mongoose#connect

API

Opens the default mongoose connection.

Mongoose#connect 开启默认的 mongoose 连接。如果只连接一个库,就用这个默认的。

1.连接数据库 mongo.js

const db = mongoose.connect(mongo.url(), mongoOptions)
exports.mongoose = db
  1. CRUD操作
const db = require('./mongo.js')
const NameSchema = new Schema({
  name: String
})

const NameModel = db.mongoose.model('Name', NameSchema)

class NameDAO = {
  ...
}

Mongoose#createConnection

API里是这样写的

Each connection instance maps to a single database. This method is helpful when mangaging multiple db connections.

Mongoose#createConnection 是适合于多个数据库连接的方式

1.连接数据库 mongo.js

const db = mongoose.createConnection(mongo.url(), mongoOptions)
const Schema = mongoose.Schema
const NameSchema = new Schema({
  name: String
})
db.model('Name', NameSchema)
exports.mongoose = db
  1. CRUD操作
const db = require('./mongo.js')
const NameModel = db.mongoose.model('Name')

class NameDAO = {
  ...
}

最后

要多看 API 文档 。。。。

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions