nuxt全栈仿美团官网11——geo下面的其他接口

慕课网教程链接:https://coding.imooc.com/class/280.html

平时在有道云上做笔记,直接发到这里格式全乱了,有空整理,大家也可查看有道云链接:

http://note.youdao.com/noteshare?id=9a0e2689414739cd85fa81222c51a442&sub=A503B5B8421D432AA64B7A31D14ADC42

导入相关数据

本例需要导入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())

这样上述所有接口直接在浏览器中访问时看起来就顺眼多了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值