Koa短信接口
Koa+ES6
Mongoose
Sequelize
地址接口无论在我们任何一个项目中,都是十分重要并且基本的功能的。
所以本次我们通过使用Koa结合MongoDB数据库来制作一个地址接口。
首先我们肯定是需要先拥有地址数据,并且导入数据库的。所以我在网上有找到一些地址信息文件,这里我就不放具体链接了,百度上面基本上一大堆。
-
其次我是使用的MongoDB可视化工具,MongoDB Compass来进行操作的。当然也有小伙伴使用的是Robo 3T之类的不过不影响。
-
进入之后我们直接点击CONNECT即可链接本地的数据库。
-
在选中集合之后 我们的集合中是没有任何数据的,这个时候页面上会显示Import Data引入数据,然后我们进行点击,将我们存在本地的JSON文件引入即可。
-
有的小伙伴可能用不好这样的方法,我们也可以使用inser Document的方法直接将内容复制过来
-
引入成功后就是如下图所示的样式。
接下来我们就可以将我们的数据库放在一边了,接着进行我们Koa接口的实现。
//首先我们还是建立模型,不需要特别多的内容。
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const AddressSchema = new Schema({
id: {
type: Number
},
name:{
type: String
}
})
export default mongoose.model('area', AddressSchema)
- 接下来我们就需要使用Mongoose来进行数据库的数据请求了。
import Router from 'koa-router'
import Address from '../../dbs/models/Address'
//引入路由以及模型文件
const router = new Router({
prefix: '/address'
})
//定义路由前缀
router.get('/', async (ctx, next) => {
const findResult = await Address.find({})
if(findResult.length > 0){
ctx.body = {
status:200,
msg:'城市列表',
success:true,
data:findResult
}
ctx.status = 200
} else {
ctx.status = 500;
ctx.body = {
success: false,
msg:'啊哦,你瞅瞅你是不是请求错了',
status: 500
}
}
})
- 通过如上的方式我们就可以进行城市列表的请求了,但是很多时候我们不需要那么多的数据,只需要省份做一个省份列表。 所以我们就需要再完善一下了。
router.get('/getProvince', async (ctx, next) => {
const findResult = await Address.find({},{name:true,id:true})
//这样我们只将ID以及Name设置为True 这样我们查询的数据中只会显示表中定义的name以及id了
if(findResult.length > 0) {
ctx.body = {
findResult,
status: 200,
}
} else {
ctx.body = {
status: 500,
msg: '啊哦,你查询的内容丢失了'
}
}
})
- 然后我们肯定在逛电商的时候,或者点外卖的时候,让你选择省份之后,会根据省份进行加载市县之类的,所以我们需要接受参数省份,从而获取具体的城市。
router.get('/city', async (ctx, next) => {
let { Province } = ctx.request.body
console.log(Province)
// const findResult = await Address.find({'name':Province})
const findResult =await Address.find({ name:{$regex:Province,$options: '$i'}})
if(findResult.length > 0) {
ctx.body = {
findResult,
status: 200,
msg: '查询成功'
}
} else {
ctx.body = {
status: 500,
msg: '您查找的数据被丢进了异次元'
}
}
})router.get('/city', async (ctx, next) => {
let { Province } = ctx.request.body
// 在这里我们使用了模糊查询的方式。
//因为很多用户是不一定会输入一个XX市、XX省固定的格式的。
//毕竟用户才是上帝,要从用户方便的角度来出发。
//他们很有可能只是输入一个北京、上海等等,所以我们需要进行模糊的匹配。
const findResult =await Address.find({ name:{$regex:Province,$options: '$i'}})
if(findResult.length > 0) {
ctx.body = {
findResult,
status: 200,
msg: '查询成功'
}
} else {
ctx.body = {
status: 500,
msg: '您查找的数据被丢进了异次元'
}
}
})
- 这样我们就完成了一个地址数据的请求了,然后接下来就是使用Postman来进行测试接口或者直接在客户端请求了。我这里就不展示请求数据啦,大家也可以亲自去尝试一下。
- 还有 不要忘了将路由导出哦。
export default router