# egg_mongodb_wechat **Repository Path**: chengdong789/egg_mongodb_wechat ## Basic Information - **Project Name**: egg_mongodb_wechat - **Description**: 小程序第一阶段项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.yuque.com/u22016549/samrdx/hp7fo5 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-23 - **Last Updated**: 2021-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: api文档 ## README # 01init 项目初始化 ### 1-1 使用egg-template模版 ``` https://gitee.com/igeek-home/egg-template ``` ### 1-2 安装依赖并启动项目 ``` cnpm i npm run dev ``` ### 1-3 将这个步骤推送到远程01init分支 ``` git checkout -b 01init git add . git commit -m"01init" git push origin 01init ``` # 02mongodb 数据库 安装mongodb数据库并建立链接,测试 ### 1-1 安装依赖 ``` cnpm i egg-mongodb -S ``` ### 1-2 config/plugin.js配置 ```javascript module.exports = { cors:{ enable:true, package:"egg-cors" }, ++ mongodb:{ enable:true, package:"egg-mongodb" } }; ``` ### 1-3 config/config.default.js ```javascript config.mongodb = { app: true, agent: false, client:{ hosts: '114.132.226.240:10031', db: 'wechat', } } ``` ### 1-4 配置banner接口 ```javascript app/router.js 配置一个新的路由 module.exports = app => { const { router, controller } = app; ... router.get("/api/article/banner", controller.article.banner) }; ``` ```javascript app/controller/article.js 配置banner文件 const Controller = require('egg').Controller; class ArticleController extends Controller { async banner() { const {ctx} = this ctx.body = { status:200, msg:"banner" } } } module.exports = ArticleController; ``` ### 1-5 链接banner表 ```javascript class ArticleController extends Controller { async banner() { const {ctx} = this var db = this.app.mongodb var res = await db.collection("banner").find().toArray() if(res.length){ ctx.body = { status:200, res, msg:"banner" } }else{ ctx.status = 400 ctx.body = { status:400, msg:"数据库输入的参数不合法" } } } } ``` ### 1-6 推送 ``` git checkout -b 02md git add . git commit -m"02md" git push origin 02md ``` # 03 拆分controller #### 1-1 业务 拆分controller及配置/api/article/list ``` # 1、在controller新建article文件夹,集中放置和文章相关的controller controller/article/banner.js controller/article/list.js ``` ```javascript list.js class ListController extends Controller { async index() { const {ctx} = this; var db = this.app.mongodb; var res = await db.collection("article").find().toArray(); var url = ctx.origin+"/public" res.forEach(item=>{ item.imgSrc = url+ item.imgSrc; item.avatar = url+item.avatar; item.headImgSrc = url+item.headImgSrc; }) ctx.body = { status:200, res } } } ``` #### 1-2 推送 ``` git checkout -b 03c_list git add . git commit -m"03c_list" git push origin 03c_list ``` # 04art_subject 实现文章详情的跳转 ```javascript 'use strict'; const Controller = require('egg').Controller; const {ObjectId}= require("mongodb"); class SubjectController extends Controller { async index() { const {ctx} = this; var {id} = ctx.params; try{ var db = this.app.mongodb; var res = await db.collection("article").find({_id:ObjectId(id)}).toArray(); // console.log(res) ctx.body = { status:200, res } }catch(err){ this.app.logger.error(err); ctx.status = 400; ctx.body = { status:400, msg:"输入的id值参数不合法" } } } } module.exports = SubjectController; ``` ``` collected:false ``` # 05收藏功能 点击收藏按钮,后端实现两条逻辑 ``` 1、将article对应的item的collected字段做了更改 2、collected=true,将对应的item添加到user表中,为false则移除 ``` ### 1-1 实现collected字段的更改 ```javascript 'use strict'; const Controller = require('egg').Controller; const {ObjectId} = require("mongodb") class CollectController extends Controller { async index() { const {ctx} = this console.log(ctx.request.body); var {id,collected} = ctx.request.body collected = (collected == "true")?true:false var db = this.app.mongodb // 1、更改collected var res = await db.collection("article").updateOne({_id:ObjectId(id)},{$set:{collected}}) console.log(res); ctx.body = "collect" } } module.exports = CollectController; ``` ### 1-2 service的抽离 service的作用,可以将一些公用的逻辑抽离到service,之后所有的controller都可以调用 ```javascript 'use strict'; const Service = require('egg').Service; class ArticleService extends Service { async find() { return "数据" } } module.exports = ArticleService; ``` ```javascript 'use strict'; const Controller = require('egg').Controller; class HomeController extends Controller { async index() { const { ctx } = this; var res = await ctx.service.article.find() console.log(res) ctx.body = { code:200, msg:"hello world" } } } module.exports = HomeController; ``` # 06 将对应的item放到user表中 ``` # 满足的条件 --添加 1、collected的状态为true 2、user表中没有对应的字段 ``` ``` # 删除的条件 collected的状态为false ``` ```javascript const Controller = require('egg').Controller; const {ObjectId} = require("mongodb") class CollectController extends Controller { async index() { const {ctx} = this console.log(ctx.request.body); var {id,collected} = ctx.request.body collected = (collected == "true")?true:false var db = this.app.mongodb // 1、更改collected await db.collection("article").updateOne({_id:ObjectId(id)},{$set:{collected}}) // 2、根据id查询对应的数据 var res = await ctx.service.article.find(id) var item = res[0] item._id = ObjectId(id) // 3、存数据的时候,collected == true && 数据库中没有对应的id字段的数据 try{ if(collected){ await db.collection("user").insertOne(item) ctx.body = { status:200, msg:"收藏成功" } }else{ await db.collection("user").deleteOne({_id:ObjectId(id)}) ctx.body = { status:200, msg:"取消收藏" } } }catch(err){ this.app.logger.error(err) ctx.body={ status:400, msg:'数据库中数据已经存在,请不要重复添加' } } } } module.exports = CollectController; ``` # 07 拆分路由 07router ```javascript /app/routers/article.js module.exports = app => { const { router, controller } = app; router.get('/', controller.home.index); router.get("/api/article/banner", controller.article.banner.index) router.get("/api/article/list", controller.article.list.index) router.get("/api/article/subject/:id", controller.article.subject.index) router.post("/api/article/collect", controller.article.collect.index) }; ``` ```javascript /app/router.js module.exports = app => { require('./routers/article')(app) }; ``` # 08 请求movie相关的数据 ``` /api/movie/:m ``` ```javascript /app/controller/movie/list.js const Controller = require('egg').Controller; const {ObjectId} = require("mongodb") class ListController extends Controller { async index() { var {ctx} = this var {m} = ctx.params var res = await ctx.service.movie.find(m) if(res.length){ ctx.body = { status:200, msg:m, res } }else{ ctx.status = 400, ctx.body = { status:400, msg:"输入的参数不合法" } } } } module.exports = ListController; ``` ```javascript /app/service/movie.js const Controller = require('egg').Controller; class MovieController extends Controller { async find(m) { const db = this.app.mongodb const res = await db.collection(m).find().toArray() return res } } module.exports = MovieController; ``` # 09 请求电影详情和搜索的接口 ```javascript /api/moviesSearch/keyword=你 /app/controller/movie/search class SearchController extends Controller { async index() { const {ctx} = this const {keyword} = ctx.query var res = await ctx.service.movie.getMovieSearch(keyword) ctx.body = { status:200, msg:"搜索结果", res } } } module.exports = SearchController; ``` ```javascript /app/service/movie.js 'use strict'; const Controller = require('egg').Controller; class MovieController extends Controller { async find(m) { const db = this.app.mongodb const res = await db.collection(m).find().toArray() return res } async getMovieDetail(id){ const db = this.app.mongodb const tables = ["top250","inTheaters","comingSoon"] var sum = [] for(var i=0;i