【Koa】【MongoDB】koa框架连接MongoDB

Koa框架安装及配置

cnpm install koa -g
koa my-app
cd my-app
npm install

虽然使用npm start启动项目有效,但官方推荐使用npm run dev启动项目,因为dev的命令用到了nodemon,可以实时进行热更新。

在这里插入图片描述

不过,未修改任何配置下运行npm run dev命令会报错,这个时候,我们只需要对dev做如下修改即可。修改后,再次敲入命令,就可以运行起来了。

在这里插入图片描述


运行后,在浏览器敲入:http://localhost:3000,将看到如下界面,说明服务启动成功。

在这里插入图片描述

打开/bin/www,找到如图所示的地方,3000是koa的默认端口,当有其他服务占用该端口时,可以考虑修改这个端口号。

在这里插入图片描述

入门Koa的用法

在routes的文件夹下新建一个路由文件,并初始化路由

./routes/index.js

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

//...接口编写处

module.exports = router;

在app.js文件中注册路由文件

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

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

获取http请求参数

参数形式:(用url传递参数有长度限制和敏感信息不安全等缺点)

1.查询字符串:?q=keyword

获取:ctx.request.query

2.路由参数:/users/:id (一般是必选的)

获取:ctx.request.params

3.请求体:{name: …} (两种形式:json和form,json:application/json, form:application/x-www-form-urlencoded)

获取:ctx.request.body(需安装中间件koa-bodyparser,但koa框架已经为我们安装了)


连接MongoDB数据库

安装mongoose模块

cnpm install mongoose --save-dev

新建一个文件夹db,文件目录:./db/models/user.js、./db/index.js

在这里插入图片描述

在Koa中创建模式(表),无需在MongoDB Compass中手动添加表

./db/models/user.js

const mongoose = require('mongoose')

const userSchema = new mongoose.Schema({
	//创建模式,下面是表的字段名,并定义字段类型
    username:String,
    pwd:String,
    phone:Number,
})
const User = mongoose.model('user',userSchema)

module.exports = {
    User
}

值得注意的是,mongoose.model(‘user’,userSchema)会让MongoDB自动添加一个数据库名为users,不要看错了,是usersusersusers重要的事情说三遍,无论写什么,MongoDB新增表名就是会多加一个s

./db/index.js

const mongoose = require('mongoose')

module.exports = () => {
    mongoose.connect('mongodb://localhost:27017/表名', 
    				{ useNewUrlParser: true })
    //举个栗子
    //mongoose.connect('mongodb://localhost:27017/users', 
    //					{ useNewUrlParser: true })
        .then(() => {
            console.log('数据库连接成功')
        }).catch(err => {
            console.log('连接出错了', err)
        })
}

重新启动服务,若数据库连接错误,则需要手动启动mongoDB服务

在这里插入图片描述


入门Koa对MongoDB的操作(增删改查)

./routes/index.js

const {User} = require('../db/models/user')

增 - create()

router.post('/add',async(ctx)=>{
	//字段名需要和在模式中定义的保持一致
	await User.create({字段名1:...,字段名2:...}).then(res=>{
		ctx.body = {
			...res
		}
	})
})

删 - where().remove() / findByIdAndRemove({id}) / findOne().remove() / find().remove()

router.post('/delete',async(ctx)=>{
	//先查询,再删除
	await User.where({字段名1:...,字段名2:...}).remove()
		.then(res=>{
			ctx.body = {
				...res
			}
		})
})

改 - where().update() / updateOne({},{}) / findByIdAndUpdate({id},{})

router.post('/update',async(ctx)=>{
	//先查询,再修改
	await User.where({字段名1:...,字段名2:...})
		.update({字段名1:...,字段名2:...})
		.then(res=>{
			ctx.body = {
				...res
			}
		})
})

查 - find() / findOne({}) / findById({id})

find():查找全部

findOne():根据条件查找

router.post('/findOne',async(ctx)=>{
	//先查询,再修改
	await User.findOne({字段名1:...,字段名2:...},{字段名3:...,字段名4:...})
		.then(res=>{
			ctx.body = {
				...res
			}
		})
})

router.get('/find',async(ctx)=>{
	//先查询,再修改
	await User.find().then(res=>{
			ctx.body = {
			...res
		}
	})
})

需要注意的是,操作数据库是异步操作,需要使用await,否则会报Not Found错误


请求参数类型控制

我们已经在./db/models/user.js文件中对表的字段定义好了数据类型,对表进行增改操作时,Mongoose会帮我们将数据对应的进行类型转换。

所有类型的字段均可传null,不可传undefined / NaN

可行操作:均可传null
接收方(String)- 发送方(任意类型)
接收方(Number)- 发送方(为数字的String或者为""
接收方(Boolean)- 发送方(为true/false的String)

不可行操作:均不可传undefined以及NaN
接收方(Number)- 发送方(不为数字的String)
接收方(Boolean)- 发送方(不为true/false的String或者为""

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值