写下本文的时候,MongoDB的社区版已经是5了,官方的node driver是4.2。Mongoose版本出到6.1.2 了。但是egg-mongoose插件还保持在老版本。以下记录下如何在egg.js下配置使用 Mongoose 6。
步骤:
- 安装mongoose 6
- 设置 app/config/config.default.js
- 编写 app.js
- 编写数据库模型
- 使用数据库模型
1:安装mongoose 6
npm i mongoose
2:设置app/config/config.default.js
打开app/config/config.default.js文件,添加以下配置信息
//带用户名密码认证的方式
config.mongoose = {
client: {
// 使用test用户名连接test数据库,认证库为admin
url: 'mongodb://localhost:27017/test?authSource=admin',
options: {
user: 'test',
pass: 'test',
},
},
};
//不带认证
config.mongoose = {
client: {
url: 'mongodb://localhost:27017/test',
options: {},
},
};
3: 编写app.js
在项目的根目录下创建一个app.js文件
'use strict';
const Mongoose = require('mongoose');
const path = require('path');
module.exports = app => {
app.addSingleton('mongoose', createMongoose);
app.mongoose = Mongoose;
loadModelToApp(app);
};
/**
* 创建 app.mongoose 的单例
* @param {*} config
* @param {*} app
* @return
*/
async function createMongoose(config, app) {
// 监听连接事件
Mongoose.connection.on('connected', function() {
app.coreLogger.info(`[egg-mongoose-v6] ${config.url} connected successfully`);
});
// 监听重连事件
Mongoose.connection.on('reconnected', function() {
app.coreLogger.info(`[egg-mongoose-v6] ${config.url} reconnected successfully`);
});
// 连接数据 这里url和options就是 config.default.js中配置的
try {
await Mongoose.connect(config.url, config.options);
} catch (err) {
err.message = `[egg-mongoose-v6] ${err.message}`;
app.coreLogger.error(err);
}
// 监听错误
Mongoose.connection.on('error', function(err) {
err.message = `[egg-mongoose-v6] ${err.message}`;
app.coreLogger.error(err);
});
return Mongoose;
}
/**
* 加载 app/model中的模型
* @param {*} app
*/
function loadModelToApp(app) {
const dir = path.join(app.config.baseDir, 'app/model');
app.loader.loadToApp(dir, 'model', {
caseStyle: 'upper',
});
}
4: 编写数据库模型
我们以 users
集合为例,编写一个模型。
在app/model中新建一个user.js文件
// app/model/user.js
'use strict';
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: { type: String },
password: { type: String },
});
return mongoose.model('User', UserSchema);
};
5: 使用数据库模型
const {ctx,app}=this;
const user = new app.model.User({
username: '圆号手',
password: '我的密码',
});
await user.save();
搞定!
若有收获,就点个赞吧