Egg.js下使用Mongoose 6

1,304 阅读1分钟

写下本文的时候,MongoDB的社区版已经是5了,官方的node driver是4.2。Mongoose版本出到6.1.2 了。但是egg-mongoose插件还保持在老版本。以下记录下如何在egg.js下配置使用 Mongoose 6。

步骤:

  1. 安装mongoose 6
  2. 设置 app/config/config.default.js
  3. 编写 app.js
  4. 编写数据库模型
  5. 使用数据库模型

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();

搞定!

若有收获,就点个赞吧