|
| 1 | +# [半夜改bug] mongoose 的 createConnection 和 connect |
| 2 | + |
| 3 | +> 代码出 bug 大半夜的被 mongoose 的连接函数搞惨 |
| 4 | +
|
| 5 | +因为代码里 mongo 数据库的连接方式的代码被改成了 `const db = mongoose.createConnection(mongo.url(), mongoOptions)`,所以在调用数据插入函数时 `Promise` 的 resolve 和 reject 都没有返回,也没有打印任何异常信息。 |
| 6 | + |
| 7 | +查了业务逻辑、本地 mongo 的读写都没问题,最后发现是 mongo 的连接文件 connect.js 被修改了。 |
| 8 | + |
| 9 | +因为用了 `mongoose.createConnection` 所以此时的 model 应该是 `db.mongoose.model('Product')` |
| 10 | + |
| 11 | +而之前的是用默认的 `mongoose.connect()` 方式连接的数据库,获取 model 的代码也应该是 `const ProductModel = db.mongoose.model('Product', ProductSchema)` |
| 12 | + |
| 13 | +数据库的链接方式被改了,model 没有变,所以增删改查的代码一直被挂起,没有任何的返回。😂😂😂 |
| 14 | + |
| 15 | + |
| 16 | +## API和示例代码 |
| 17 | + |
| 18 | +### Mongoose#connect |
| 19 | + |
| 20 | +API |
| 21 | + |
| 22 | +> Opens the default mongoose connection. |
| 23 | +
|
| 24 | +`Mongoose#connect` 开启默认的 mongoose 连接。如果只连接一个库,就用这个默认的。 |
| 25 | + |
| 26 | +1.连接数据库 mongo.js |
| 27 | + |
| 28 | +```js |
| 29 | +const db = mongoose.connect(mongo.url(), mongoOptions) |
| 30 | +exports.mongoose = db |
| 31 | +``` |
| 32 | + |
| 33 | +2. CRUD操作 |
| 34 | + |
| 35 | +```js |
| 36 | +const db = require('./mongo.js') |
| 37 | +const NameSchema = new Schema({ |
| 38 | + name: String |
| 39 | +}) |
| 40 | + |
| 41 | +const NameModel = db.mongoose.model('Name', NameSchema) |
| 42 | + |
| 43 | +class NameDAO = { |
| 44 | + ... |
| 45 | +} |
| 46 | +``` |
| 47 | + |
| 48 | + |
| 49 | +### Mongoose#createConnection |
| 50 | + |
| 51 | +API里是这样写的 |
| 52 | + |
| 53 | +> Each connection instance maps to a single database. This method is helpful when mangaging multiple db connections. |
| 54 | +
|
| 55 | +`Mongoose#createConnection` 是适合于多个数据库连接的方式 |
| 56 | + |
| 57 | +1.连接数据库 mongo.js |
| 58 | + |
| 59 | +```js |
| 60 | +const db = mongoose.createConnection(mongo.url(), mongoOptions) |
| 61 | +const Schema = mongoose.Schema |
| 62 | +const NameSchema = new Schema({ |
| 63 | + name: String |
| 64 | +}) |
| 65 | +db.model('Name', NameSchema) |
| 66 | +exports.mongoose = db |
| 67 | +``` |
| 68 | + |
| 69 | +2. CRUD操作 |
| 70 | + |
| 71 | +```js |
| 72 | +const db = require('./mongo.js') |
| 73 | +const NameModel = db.mongoose.model('Name') |
| 74 | + |
| 75 | +class NameDAO = { |
| 76 | + ... |
| 77 | +} |
| 78 | +``` |
| 79 | + |
| 80 | + |
| 81 | +## 最后 |
| 82 | + |
| 83 | +要多看 API 文档 。。。。 |
| 84 | + |
| 85 | + |
0 commit comments