慕课网教程链接:https://coding.imooc.com/class/280.html
平时在有道云上做笔记,直接发到这里格式全乱了,有空整理,大家也可查看有道云链接:
导入相关数据
本例需要导入cities、provinces两个数据表
建立模型
省份模型
import mongoose from 'mongoose' const provinceSchema = mongoose.Schema({ id:{ type:String, require:true }, value:{ type:Array, require:true } }) export default mongoose.model('province',provinceSchema)
城市模型
import mongoose from 'mongoose' const citySchema = mongoose.Schema({ id:{ type:String, require:true }, value:{ type:Array, require:true } }) export default mongoose.model('city',citySchema)
geo下继续添加接口
查找省份
router.get('/province', async (ctx, next) => { const provinces = await Province.find() ctx.body = { code: 0, provinces: provinces.map(item => ({ id: item.id, name: item.value[0] })) } })
查找城市
// 每个City 存储结构 /*const city = { "_id" : ObjectId("5b94956583d6b81e9f96c843"), "id" : "220000", "value" : [ { "province" : "吉林省", "name" : "长春市", "id" : "220100" }, { "province" : "吉林省", "name" : "吉林市", "id" : "220200" }, …… ] }*/ router.get('/city', async (ctx, next) => { const result = await City.find() let values = [] // 数组的concat方法不能改变自己,只能接受返回值 result.forEach(item => values = values.concat(item.value)) const cities = values.map(item => ({ id: item.id, province: item.province, name: ['市辖区', '省直辖县级行政区划'].includes(item.name) ? item.province : item.name })) ctx.body = { code: 0, cities } })
根据id查找对应省份
router.get('/province/:id', async (ctx, next) => { // ctx.params.id是url中解析出来的参数,具体参见动态路由 const { value } = await City.findOne({ id: ctx.params.id }) ctx.body = { code: 0, city: value } }) // 源码如下,不知为何要写这么复杂 /*router.get('/province/:id',async (ctx,next)=>{ let city = await City.findOne({id: ctx.params.id}) ctx.body = { code: 0, city: city.value.map(item => { return {province: item.province, id: item.id, name: item.name} }) } })*/
查找热门城市
router.get('/hotCity', async (ctx, next) => { const list = ['北京市', '上海市', '广州市', '西安市', '青岛市'] const result = await City.find() let hotCity = [] result.forEach(item => { hotCity = hotCity.concat(item.value.filter(city => list.includes(city.name) || list.includes(city.province))) }) ctx.body = { code: 0, hotCity } })
安装 koa-json
注意,在根目录下执行(如果刚才在其他目录下向数据库导入数据请切换回来):
cnpm i koa-json --save-dev
然后在index中引入使用
import json from 'koa-json' …… // 在bodyParser之后使用 app.use(json())
这样上述所有接口直接在浏览器中访问时看起来就顺眼多了