eggjs使用egg-mongoose操作MongoDB数据库

  • npm安装mongoose依赖

npm install egg-mongoose --save

  • 配置config/plugin.js和config.default.js
// config/plugin.jsmodule.exports = {......mongoose: {enable: true,package: 'egg-mongoose'}
}
// config/config.default.jsmodule.exports = appInfo => {const config = exports = {};......config.mongoose = {url: 'mongodb://localhost:27017',options: {user: 'xxxx', // 数据库用户名pass: 'xxxx',     // 数据库密码dbName: 'PieCake'    // 数据库名}}
}
  • 创建Model(模型)类,对接数据库字段
// app/model/userModel.jsmodule.exports = app => {const mongoose = app.mongoose;const Schema = mongoose.Schema;const PostSchema = new Schema({uid: {type: String,// 创建唯一索引unique: true},username: {type: String,// 创建唯一索引unique: true},password: {type: String},email: {type: String,// 创建唯一索引unique: true},secret: {type: String},createTime: {type: Date}});// 参数一: 模型被绑定到什么名字上, 参数二: 绑定的模型数据, 参数三: 对应的数据库表名return mongoose.model('UserModel', PostSchema, 'user');//这里有个坑,外部在使用Model时,this.ctx.model.XXXX 此处的XXXX指的是大写开头的文件名,例如model/test 就是this.ctx.model.Test,而不是return中指定的那个模型名(这个设计简直日了*)
}
  • 在service中使用mongoose对MongoDB进行操作
// app/service/userService.js'use strict';
const Service = require('egg').Service;
const Error = require('../error/error');class UserService extends Service {async addUser(obj) {// 根据用户名密码查找用户信息const _tUser = await this.ctx.model.UserModel.findOne({'$or': [{username: obj.username},{email: obj.email}]});if (_tUser) {// 用户名已存在if (_tUser.username == obj.username) return Error.USER.USERNAME_EXIST;// 邮箱已存在else return Error.USER.EMAIL_EXIST;} else {const _User = new this.ctx.model.UserModel({uid: this.ctx.randomString(8),username: obj.username,password: obj.password,email: obj.email,secret: this.ctx.randomString(8),createTime: this.ctx.getTimeTick()});// mongoose保存到数据库_User.save();}}
}
  • controller调用service
// app/controller/userConroller.js'use strict';
const Controller = require('egg').Controller;
const checkRules = require('../validator/registerRules');class UserController extends Controller {async register() {const _par = this.ctx.request.body;// 参数校验const valiErr = await this.ctx.validator(checkRules, _par);if (valiErr){this.ctx.sendError(valiErr);return;}// 如果返回注册错误信息const userErr = await this.service.userService.addUser(_par);if (userErr) {this.ctx.sendError(userErr);return;}// 注册成功this.ctx.sendSuccess({code: 0,data: {msg: '注册成功'}});}
}// tips:sendError(),sendSuccess(),validator()是自行封装的方法
  • router绑定controller
// app/router.js'use strict';/*** @param {Egg.Application} app - egg application*/
module.exports = app => {const { router, controller } = app;router.post('/api/user/register' ,controller.userController.register);};

eggjs使用egg-mongoose操作MongoDB数据库相关推荐

  1. 使用mongoose 在 Node中操作MongoDB数据库

    MongoDB 关系型和非关系型数据库 关系型数据库(表就是关系,或者说表与表之间存在关系). 所有的关系型数据库都需要通过sql语言来操作 所有的关系型数据库在操作之前都需要设计表结构 而且数据表还 ...

  2. 使用第三方包mongoose来操作MongoDB数据库,解决报错:MongooseError

    使用第三方包mongoose来操作MongoDB数据库 官方网站 配置文件 异常 异常描述: MongooseError: Operation cats.insertOne() buffering t ...

  3. nodejs操作mongodb数据库(mongoose)

    准备 在上一篇的基础上,通过npm安装mongoose. 关于mongoose Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB n ...

  4. 58 Node.js中操作mongoDB数据库

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder 的程序人生 1.数据库概述及环境搭建 1.1 为什么要使用数据库 动态网站中的数据都是存储在数据 ...

  5. node用mongodb还是mysql,Node 操作 mongoDB 数据库和 mySQL数据库

    下载安装 MongoDB image.png 直接点击下载就行了 image.png 安装 mongodb 一直点击下一步,知道这一步 image.png 选中自己选择想安装的目录路径(选择安装的目录 ...

  6. Node.js使用mongoose操作mongodb

    软件配置: 1.node v8.9.3 2. npm 5.5.1 3. mongoose及MongoDB版本见下package.json // package.json {   "name& ...

  7. Python 操作 MongoDB 数据库!

    作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...

  8. 用python向mongodb插入数据_Python操作MongoDB数据库(一)

    Python操作MongoDB数据库(一) 前言 干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 <初识 MongoDB 数据库>.这 ...

  9. PHP操作mongodb数据库操作类

    最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb ...

最新文章

  1. 超越Google,快手落地业界首个万亿参数推荐精排模型
  2. Hadoop记录-JMX参数
  3. 经典的C++面试题目
  4. python npv 计算公式_机器学习各种相似性度量及Python实现
  5. Mysql雨松工具类使用
  6. upload_labs_pass17_二次渲染
  7. 创建 floating IP - 每天5分钟玩转 OpenStack(106)
  8. 关于使用类成员函数作为回调的方法
  9. 如何让别人看不懂java代码_为什么你写的代码别人看不懂?
  10. 图片隐写,盲水印,加密logo
  11. 使用java、html5以及wPaint实现在线编辑图片并保存到FTP中的功能,在线图片为iis服务
  12. 满功耗RTX 4060首选游戏本:华硕天选4新品开售
  13. 【马司机带带我】君子日三省吾身
  14. Web 前端必会的 PhotoShop 技能
  15. 欲先攻其事必先利其器 (第三方资源篇)
  16. 【深度学习】ResNet50
  17. Wi-Fi Display
  18. 主要讲解了构造器和伴生对象内容
  19. 如何卸载MSN 2009(Live Messenger 2009)(转载)
  20. L1-057 PTA使我精神焕发 (5 分)

热门文章

  1. JSP 传统标签extends TagSupport
  2. 蔡高厅高等数学37-罗必塔法则
  3. 100%教会爬取全国保险业务员微信号码和拉勾网招聘数据
  4. 稻草芭比VOD专辑^^
  5. ansible——playbook剧本
  6. x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error“
  7. linux的scp远程复制命令
  8. linux系统不能用投影仪,linux连接投影机方法介绍
  9. 一个省只需要1个基站!看网络化超短波距视城市机动应急通信系统怎么建!
  10. b460m itx/ac Z390I B360pro安装苹果网卡BCM963402CS