eggjs使用egg-mongoose操作MongoDB数据库
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数据库相关推荐
- 使用mongoose 在 Node中操作MongoDB数据库
MongoDB 关系型和非关系型数据库 关系型数据库(表就是关系,或者说表与表之间存在关系). 所有的关系型数据库都需要通过sql语言来操作 所有的关系型数据库在操作之前都需要设计表结构 而且数据表还 ...
- 使用第三方包mongoose来操作MongoDB数据库,解决报错:MongooseError
使用第三方包mongoose来操作MongoDB数据库 官方网站 配置文件 异常 异常描述: MongooseError: Operation cats.insertOne() buffering t ...
- nodejs操作mongodb数据库(mongoose)
准备 在上一篇的基础上,通过npm安装mongoose. 关于mongoose Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB n ...
- 58 Node.js中操作mongoDB数据库
技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder 的程序人生 1.数据库概述及环境搭建 1.1 为什么要使用数据库 动态网站中的数据都是存储在数据 ...
- node用mongodb还是mysql,Node 操作 mongoDB 数据库和 mySQL数据库
下载安装 MongoDB image.png 直接点击下载就行了 image.png 安装 mongodb 一直点击下一步,知道这一步 image.png 选中自己选择想安装的目录路径(选择安装的目录 ...
- Node.js使用mongoose操作mongodb
软件配置: 1.node v8.9.3 2. npm 5.5.1 3. mongoose及MongoDB版本见下package.json // package.json { "name& ...
- Python 操作 MongoDB 数据库!
作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...
- 用python向mongodb插入数据_Python操作MongoDB数据库(一)
Python操作MongoDB数据库(一) 前言 干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 <初识 MongoDB 数据库>.这 ...
- PHP操作mongodb数据库操作类
最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb ...
最新文章
- 超越Google,快手落地业界首个万亿参数推荐精排模型
- Hadoop记录-JMX参数
- 经典的C++面试题目
- python npv 计算公式_机器学习各种相似性度量及Python实现
- Mysql雨松工具类使用
- upload_labs_pass17_二次渲染
- 创建 floating IP - 每天5分钟玩转 OpenStack(106)
- 关于使用类成员函数作为回调的方法
- 如何让别人看不懂java代码_为什么你写的代码别人看不懂?
- 图片隐写,盲水印,加密logo
- 使用java、html5以及wPaint实现在线编辑图片并保存到FTP中的功能,在线图片为iis服务
- 满功耗RTX 4060首选游戏本:华硕天选4新品开售
- 【马司机带带我】君子日三省吾身
- Web 前端必会的 PhotoShop 技能
- 欲先攻其事必先利其器 (第三方资源篇)
- 【深度学习】ResNet50
- Wi-Fi Display
- 主要讲解了构造器和伴生对象内容
- 如何卸载MSN 2009(Live Messenger 2009)(转载)
- L1-057 PTA使我精神焕发 (5 分)
热门文章
- JSP 传统标签extends TagSupport
- 蔡高厅高等数学37-罗必塔法则
- 100%教会爬取全国保险业务员微信号码和拉勾网招聘数据
- 稻草芭比VOD专辑^^
- ansible——playbook剧本
- x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error“
- linux的scp远程复制命令
- linux系统不能用投影仪,linux连接投影机方法介绍
- 一个省只需要1个基站!看网络化超短波距视城市机动应急通信系统怎么建!
- b460m itx/ac Z390I B360pro安装苹果网卡BCM963402CS