项目地址:https://github.com/caochangkui/demo/tree/koa-mongoose

连接数据库

数据库名字为:koa-mongoose

const mongoose = require('mongoose')// 连接数据库,URL以mongodb:// + [用户名:密码@] +数据库地址[:端口] + 数据库名。(默认端口27017)
// 连接mongodb数据库的链接解析器会在未来移除,要使用新的解析器,通过配置{ useNewUrlParser:true }来连接 ;其他警告参考:https://mongoosejs.com/docs/deprecations.html
mongoose.connect('mongodb://127.0.0.1:27017/koa-mongoose', {useNewUrlParser:true,useCreateIndex: true})/*** mongoose从@5.2.8后会弃用一些指令,为防止程序如下警告:* (node:24864) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.* (node:24841) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.* 可以如下设置*/
mongoose.set('useNewUrlParser', true)
mongoose.set('useFindAndModify', false)
mongoose.set('useCreateIndex', true)let db = mongoose.connection
mongoose.Promise = global.Promise // 防止Mongoose: mpromise 错误db.on('error', function (err) {console.log('数据库连接出错', err)
})db.on('open', function () {console.log('数据库连接成功')
})db.on('disconnected', function () {console.log('数据库连接断开')
})

创建数据表

/*
声明 Schema
创建数据表模型,即 User,就是数据表的名字
下面给 User 表声明三个字段 username password age
*/
const userSchema = mongoose.Schema({username: {type: String,required: true},password: {type: String,require: true},age: {type: Number,require: true}
})// 根据 schema 生成 model
const model = {User: mongoose.model('User', userSchema)
}module.exports = model

定义 mongoose 数据库操作方法

const User = require('../dbs.js').User // 从dbs.js引入数据表/*** 数据库操作*/// 增加用户,方法一:save()
const saveUser = async (ctx) => {// 通过实例化一个 User 对象在添加用户const newUser = new User({username: 'cedric',password: '123',age: 27})let code = 0 // 状态码let result = '' // 返回内容try {let doc = await newUser.save()code = 0result = '保存成功, ' + doc} catch (err) {code = -1result = '保存失败, ' + err}ctx.response.body = {code,result}return result
}// 增加用户,方法二:create(), 推荐此方法
// 使用save()方法,需要先实例化为文档,再使用save()方法保存文档。而create()方法,则直接在模型Model上操作,并且可以同时新增多个文档
const createUser = async (ctx) => {let code = 0 // 状态码let result = '' // 返回内容try {let doc = await User.create({username: 'cedric222',password: '123',age: 27}, {username: 'cedric333',password: '123',age: 27})code = 0result = '保存成功, ' + doc} catch (err) {code = -1result = '保存失败, ' + errconsole.log(err)}ctx.response.body = {code,result}return result
}// 根据用户名查找用户
const findUser = async (ctx) => {let code = 0 // 状态码let result = '' // 返回内容try {let doc = await User.findOne({username: 'cedric222'})code = 0result = '查找结果: ' + doc} catch (err) {code = -1result = '查找失败: ' + err}ctx.response.body = {code,result}return result
}// 根据指定条件查找所有用户
// find指的是查找指定表的所有数据,返回的是数组
// findOne指的是查找指定表的单条数据,返回一个对象
const findAllUser = async (ctx) => {let code = 0 // 状态码let result = '' // 返回内容try {let doc = await User.find({})code = 0result = '查找结果: ' + doc} catch (err) {code = -1result = '查找失败: ' + err}ctx.response.body = {code,result}return result
}// 修改用户数据
// conditions: 查询条件;updateDoc:需要修改的数据, 都是一个对象
// multi (boolean): 默认为false。是否更新多个查询记录。
// https://segmentfault.com/a/1190000012095054#articleHeader16
// https://mongoosejs.com/docs/api.html#model_Model.update
const updateUser = async (ctx) => {let code = 0 // 状态码let result = '' // 返回内容try {let doc = await User.update({age: 27}, {age: 28}, {multi: true})code = 0result = '修改结果: ' + docconsole.log(doc)} catch (err) {code = -1result = '修改失败: ' + err}ctx.response.body = {code,result}return result
}// 删除用户数据
const removeUser = async (ctx) => {let code = 0 // 状态码let result = '' // 返回内容try {let doc = await User.remove({username: 'cedric444'})code = 0result = '删除成功: ' + docconsole.log(doc)} catch (err) {code = -1result = '删除失败: ' + err}ctx.response.body = {code,result}return result
}module.exports = {saveUser,createUser,findUser,findAllUser,updateUser,removeUser
}

入口文件app.js

const Koa = require('koa')
const app =  new Koa();const Router = require('koa-router') // koa路由中间件const router = new Router({prefix: '/api'
}) // 父路由, 给路由统一加个前缀 /apiconst bodyParser = require('koa-bodyparser') // 处理post请求,把 koa2 上下文的表单数据解析到 ctx.request.body 中
app.use(bodyParser())// 引入数据库操作方法
const UserController = require('./server/controller/users.js')// 路由,访问:http://localhost:3333/api/save
router.get('/save', UserController.saveUser)
router.get('/create', UserController.createUser)
router.get('/find', UserController.findUser)
router.get('/findall', UserController.findAllUser)
router.get('/update', UserController.updateUser)
router.get('/remove', UserController.removeUser)// 加载路由中间件
app.use(router.routes())
// allowedMethods 处理的业务是当所有路由中间件执行完成之后,若ctx.status为空或者404的时候,丰富response对象的header头
app.use(router.allowedMethods())app.listen(3333, () => {console.log('This server is running at http://localhost:' + 3333)
})

转载于:https://www.cnblogs.com/cckui/p/10429064.html

koa2入门(3)mongoose 增删改查相关推荐

  1. 视频教程-.NET MVC5—60分钟快速入门学会《增删改查》-.NET

    .NET MVC5-60分钟快速入门学会<增删改查> 从事软件开发7年,熟悉软件开发流程,精通WEB系统程序开发.先后参与随州公安无纸化办公软件.速成会计财务管理软件.明源地产ERP等重大 ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student {private Integer sid;private Int ...

  3. java springboot整合zookeeper入门教程(增删改查)

    java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...

  4. JPA入门案例完成增删改查

    目录 一.ORM思想 二.JPA规范 三.搭建JPA的基础环境 1.创建数据库表 2.创建Maven工程导入坐标 3.创建JPA的核心配置文件 4.编写实体类,配置映射关系 四.入门案例--增删改查 ...

  5. mybatis --入门 单表增删改查-curd

    目录 1. mybatis 环境搭建 2. 实体类映射文件配置(写sql) 3. mybatis核心配置文件 (环境配置) 4. 测试 mybatis document https://mybatis ...

  6. Series 入门(创建和增删改查)

    Series 是pandas两大数据结构中(DataFrame,Series)的一种.使用pandas 前需要将pandas 模块引入,因为Series和DataFrame用的次数非常多,所以将其引入 ...

  7. node 实现Token状态登录 及数据库增删改查

    1.项目目录结构 2.启动入口文件代码index.js const express = require('express') const bodyParser = require('body-pars ...

  8. koa2 mysql增删改查_koa2对mongodb的增删改查

    构建项目 npm install -g koa-generator koa2 -e projectname npm install mongoose 说明:我们用mongoose来操作mongodb, ...

  9. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite;import android.content.Context; import a ...

最新文章

  1. 某程序员因开发进度慢,被公司索赔90万!
  2. 第七课.Python面向对象(一)
  3. 数据库基准测试:database bencnmark --生成大量随机测试数据
  4. LINUX内核分析第二周学习总结——操作系统是如何工作的
  5. java 计算小费_java-以某些形状显示数字
  6. mysql ssh错误_通过SSH隧道连接时,MySQL访问被拒绝错误
  7. UIScrollView 滚动视图 (实例)
  8. TRUNCATE TABLE原理解析
  9. 2021年中国中端婴儿车和婴儿车市场趋势报告、技术动态创新及2027年市场预测
  10. 2018-2019-1 20189204《Linux内核原理与分析》第一周作业
  11. int、String、char、Array之间的转换,这一篇够了!!!
  12. 安卓手机小说阅读器_手机阅读的好帮手,安卓小说神奇的扛把子
  13. Hadoop集群搭建及配置⑥ —— Hadoop组件安装及配置
  14. gentoo linux软件安装,Gentoo Linux 快速安装方法安装
  15. 触屏计算机显示器CDU,如何在计算机上进行校准触摸屏?
  16. mailgun_用Mailgun邮寄出去!
  17. 旁观OpenGL里的透视投影矩阵
  18. 直接在文件夹打开cmd
  19. 基于linux下的shell脚本的编写
  20. 第四十讲项目三 鸡兔同笼

热门文章

  1. 怎么转换科学计数法字符串_【编码技巧】python字符串格式化教你正确打印
  2. c# 标准正太分布函数_机器学习中常见的几种概率分布
  3. /usr/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.so when searching for -lmysqlclient
  4. Codeforces 338 D. GCD Table
  5. 【总结】升级Xcode8遇到的问题及解决方案!!! [转]
  6. tensorflow中关于vgg16的项目
  7. 应用在vs的ide调试环境下运行顺利,但是在bin目录直接运行exe报错的问题
  8. c#中在工作线程创建窗体并操作
  9. win32 socket的一个简单的例子 控制台
  10. 小程序canvan画布,现两张图片合成一张,并保存到本地