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

构建项目

npm install -g koa-generator

koa2 -e projectname

npm install mongoose

说明:我们用mongoose来操作mongodb,需要安装mongoose。生成项目后,在项目里新建一个文件夹dbs,用来存放和数据库相关的配置文件,配置文件config.js声明数据库的配置选项,里面再创建一个models文件夹,存放模型文件,目录结构如下

6273428d6c29

image.png

config.js

module.exports = {

dbs:'mongodb://127.0.0.1:27017/dbs'

}

说明:在mongodb中创建一个数据库,为dbs

person.js

const mongoose = require('mongoose')

let personSchma = new mongoose.Schema({

name:String,

age:Number

})

module.exports = mongoose.model('Person',personSchma)

说明:利用mongoose操作mongodb,需要引入这个模块。首先我们要用mongoose提供的schema方法声明一个模式,也就是描述存放的数据的字段和字段类型,接着再通过这个模式创建一个模型,这个模型封装了一些操作数据库的方法,我们需要把模型导出来供我们使用。

app.js

const Koa = require('koa')

const app = new Koa()

const views = require('koa-views')

const json = require('koa-json')

const onerror = require('koa-onerror')

const bodyparser = require('koa-bodyparser')

const logger = require('koa-logger')

//操作数据库我们需要这样,引入这两个模块哦

const mongoose = require('mongoose')

const dbConfig = require('./dbs/config')

const index = require('./routes/index')

const users = require('./routes/users')

// error handler

onerror(app)

// middlewares

app.use(bodyparser({

enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {

extension: 'ejs'

}))

// logger

app.use(async (ctx, next) => {

const start = new Date()

await next()

const ms = new Date() - start

console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})

// routes

app.use(index.routes(), index.allowedMethods())

app.use(users.routes(), users.allowedMethods())

//mongoose

mongoose.connect(dbConfig.dbs,{

useNewUrlParser:true

})

// error-handling

app.on('error', (err, ctx) => {

console.error('server error', err, ctx)

});

module.exports = app

添加的代码是

const mongoose = require('mongoose')

const dbConfig = require('./dbs/config')

//mongoose

mongoose.connect(dbConfig.dbs,{

useNewUrlParser:true

})

说明:在app.js中引入mongoose和数据库的配置文件config.js,然后连接dbs数据库,传递进去的参数就是config.js文件里的dbs的值。

到这里,我们就连接上数据库了,接下来,就编写接口操作数据库。

编写增删改查数据的接口

在router文件夹下的user.js中编写接口

const router = require('koa-router')()

//要操作数据库了,之前我们在models里面根据描述创建了模型

//现在根据模型我们实例化一个表出来

//那我们需要在这个接口文件中,引进我们创建的模型,就是person文件啦

//再说一遍,schema描述表的字段,moudle里面有增删改查的操作

const Person = require('../dbs/models/person')

router.prefix('/users')

router.get('/', function (ctx, next) {

ctx.body = 'this is a users response!'

})

router.get('/bar', function (ctx, next) {

ctx.body = 'this is a users/bar response'

})

//新建一个用来操作数据库的接口

router.post('/addPerson',async function(ctx){

//创建这个模型的实例啦

const person = new Person({

//通过post请求得到的body里的数据,添加到数据库

name: ctx.request.body.name,

age: ctx.request.body.age

})

// //保存这条数据哦

// await person.save()

// //返回这个操作的状态看看,不能总是0

// ctx.body = {

// code:0

// }

//换一种写法,我们需要捕获一下异常

let code

try {

//save方法是模型封装好的,实例可以调用这个方法

await person.save()

code = 0

} catch (error) {

code = -1

}

ctx.body = {

code:code

}

})

router.post('/getPerson',async function(ctx) {

const result = await Person.findOne({name:ctx.request.body.name})

const results = await Person.find({name:ctx.request.body.name})

ctx.body = {

code:0,

result,

results

}

})

router.post('/updatePerson',async function(ctx) {

const result = await Person.where({

name:ctx.request.body.name

}).update({

age:ctx.request.body.age

})

ctx.body = {

code:0

}

})

router.post('/removePerson',async function(ctx) {

const result = await Person.where({

name:ctx.request.body.name

}).remove()

ctx.body = {

code:0

}

})

module.exports = router

测试方法:安装postman,填写我们接口的地址,根据情况选择请求方式,这里是post,还要注意的一点是,user.js里的接口还有一个前缀,也就是文件中的router.prefix('/users'),它的前缀就是/users。

测试getPerson的接口如下

6273428d6c29

image.png

数据库如下

6273428d6c29

image.png

总结:

mudels下的person.js对应的就是我们建的表,我们是通过mongoose操作数据库的,并不是mongodb原生的api,因此我们要引入这个mongoose。接着,通过mongodb提供的schema创建一个描述,是描述这个数据表的,这样,数据表就有字段了。但还不能操作它,现在我们需要通过这个描述,创建一个模型,模型里面有封装好的操作数据库的一些方法。model在这里就相当于一个桥梁,它既关联着数据表的描述,又关联着数据库。最终要完成实际操作的,还是要由实例来完成。因此,在我们编写接口的文件中,引入mongoose和模型,并且通过模型创建一个实例出来,就可以在接口操作数据啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能的时代来了,新的商业机会在哪里?

摘要: 新的时代到来意味着新的商业社会的到来,那么这些新的商业机会在哪里呢? 提起人工智能,大多数人脑子里首先跳出的可能是这些问题,人工智能会使人类都失业吗?人工智能真的可以有自我意识以及情感吗&am…

python解析excel公式_[python][openpyxl]读取excel中公式的结果值

要读取cell中的值,但是,如果cell中的值是一个公式,则读取出来的是公式。有时候我们希望读取到公式计算出来的结果,可以使用load_workbook()中的data_only属性。 load_workbook()中涉及到的全部属性,其中,re…

Linux Shell脚本专栏_Linux系统发送告警邮件脚本_02

文章目录一、Linux系统发送告警邮件脚本1. 安装mailx工具2. 编辑mailx配置文件3. 追加以下内容4. 发送邮件测试二、异常汇总2.1. 异常信息2.2. 开启授权码一、Linux系统发送告警邮件脚本 背景:外部服务器 需求:1. 安装mailx工具2. 编辑mailx配置文件3. …

任正非采访的数据分析解读

戳蓝字“CSDN云计算”关注我们哦!作者 | 林骥责编 | 阿秃2019 年 5 月 21 日,任正非接受国内媒体的采访,如果用文字转述的话,总共大约有 2.2 万个字。本文总结了任正非在采访中说的一些数据,并做了简单的分析解读&…

阿里推出 PolarFS 分布式文件系统:将存储与计算分开,提升云数据库性能(附论文)

摘要: 将存储与计算分开来大有意义,对于部署的云数据库而言更是如此。为此,阿里巴巴推出了一种新开发的名为PolarFS的分布式文件系统,旨在确保低延迟和高可用性。这个文件系统与阿里云上自己的PolarDB数据库服务搭配使用。 将存储…

ios开发 热搜词demo_手机app如何开发

泛娱科技​www.cpdzapp.com手机app开发流程为:1.首先,制作一款APP,必须要有相关的idea,也就是说,第一步是APP的idea形成。2.通过那些idea来进行APP的主要功能设计以及大概界面构思和设计。3.大功能模块代码编写以及大概…

Linux Shell脚本专栏_批量创建100用户并设置密码脚本_03

文章目录一、简单需求实现流程1. 添加用户2. 给用户设置密码二、企业需求实现流程2.1. 脚本准备工作2.2. 企业级脚本2.2. 需求说明2.3. 企业级脚本说明三、实战3.1. 运行脚本3.2. 查看创建的用户3.3. 查看文件中的用户和密码信息一、简单需求实现流程 背景:新入职1…

【大数据】Spark面试100问 | CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦!作者 | 游骑小兵责编 | 阿秃Q:什么是Spark?A:简单理解,Spark是在Hadoop基础上的改进,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,…

为数据安全而生,阿里云容灾备份方案场景实践解析

摘要: 数字经济时代,数据正以超出想象的速度快速增长。短短几年,数据量已经从TB级别跃升到PB乃至ZB级别。 数字经济时代,数据正以超出想象的速度快速增长。短短几年,数据量已经从TB级别跃升到PB乃至ZB级别。 根据相关…

Dubbo项目入门

摘要: Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 它的特性如下 面向接口代理的高性能RPC调用 智能负载均衡 服务自动注…

linux 编辑器_Linux的vi编辑器详细总结

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。vi是linux的文本编辑器,vim是vi编辑器的增强版本,习惯上也称为vi一、vi编…

聊聊困扰很多同学的一个问题:是否要转方向 ?

戳蓝字“CSDN云计算”关注我们哦!作者 | 大飞码字责编 | 阿秃这篇来聊聊困扰很多同学的一个问题:是否要转方向 ?这类问题没有标准的答案,每个人的理解也不一样,我写下的也只是我个人的想法,仅供大家参考。iOS 开发本…

傅里叶变换处理sar图像_SAR和ISAR雷达的基础知识

合成孔径雷达(SAR)和逆合成孔径雷达(ISAR)是使用雷达绘制静止物体(通常为地形)的方法。SAR/ISAR系统部署在飞机或卫星上,它们相对于地球表面或任何可能静止的物体或地形进行高速移动。SAR/ISAR得益于以下现象:相对于地形水平方向上的物体和/或天线&#…

带你玩转Logview: MaxCompute Logview参数详解和问题排查

Logview是MaxCompute Job提交后查看和Debug任务的工具。通过Logview可看到一个Job的运行状态、运行结果以及运行细节和每个步骤的进度。当Job提交到MaxCompute后,会生成Logview的链接,用户可以直接在浏览器上打开Logview链接,进入查看Job的信…

Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05

文章目录找出占用CPU/内存过高的进程1. 脚本2. 运行脚本3. 效果图找出占用CPU/内存过高的进程 1. CPU 过高的进程2. 内存 过高的进程1. 脚本 #/bin/bash echo "----------------------- CPU TOP 10------------------------" ps -eo user,pid,pcpu,pmem,args --sort…

阿里云大数据计算服务MaxCompute命令行工具——odpscmd的操作使用

在MaxCompute生态中,命令行工具究竟处于什么样的位置?它又发挥着什么样的作用?能够帮助开发者如何更好使用MaxCompute?在本文中,阿里巴巴计算平台产品专家曲宁将通过一个完整简单的小例子为大家介绍MaxCompute命令行工…

数组的合并和升序排列_区间调度问题之区间合并

读完本文,你可以去力扣拿下如下题目:56.合并区间-----------上篇文章用贪心算法解决了区间调度问题:给你很多区间,让你求其中的最大不重叠子集。其实对于区间相关的问题,还有很多其他类型,本文就来讲讲区间…

哈工大、清华、CSDN、嵌入式视觉联盟合办的 AIoT 盛会,你怎么舍得错过?!

2019 嵌入式智能国际大会即将来袭!随着物联网和人工智能技术的飞速发展与相互渗透,万物智联的新赛道已经开始显现。据中商产业研究院《2016—2021年中国物联网产业市场研究报告》显示,预计到2020年,中国物联网的整体规模将达2.2万…

mysql提交事务_mysql事务的实现原理

此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中有一个整体的认识,如下图如上图所示,MySQL服务器逻辑架构从上往下…

Linux Shell脚本专栏_查看网卡的实时流量_06

文章目录查看网卡的实时流量1. 脚本内容2. 运行脚本查看网卡的实时流量 一个服务器的流量基本可以评估出当前服务器的负载和业务的访问情况,这样更有利于对当前服务器一个大致的了解,这也是在日常的监控中这个流量是必不可少的! 本案例&…