当前位置:网站首页 > 人工智能与大数据应用 > 正文

Web应用开发框架-egg进阶与实战(二)02——环境配置与数据库初始化、编写schema、service逻辑提取

Web应用开发框架-egg进阶与实战(二)02——环境配置与数据库初始化、编写schema、service逻辑提取

正式开始
安装依赖

npm init egg type-simple

npm install egg-mongoose --save

开发顺序
  1. 安装环境,配置数据库插件
  2. 编写schema,设计存储的字段
  3. 进行路由设计, 通过控制器添加数据
    1. 错误处理
    2. 返回值
    3. 校验参数
  4. 数据库的查询
    1. 查询全部数据
    2. 查询单个数据
  5. 数据库的删除
  6. 数据库的更新
  7. service提取
配置
// config/plugin.js mongoose: { 
    enable: true, package: 'egg-mongoose', }, 
// config/config.default.js config.mongoose = { 
    url: 'mongodb://127.0.0.1/example', options: { 
   }, } 
路由配置
  1. 解析用户请求,给相应的controller
  2. 通过resources 直接创建restFul api
// app/router.js module.exports = app => { 
    const { 
    router, controller } = app; router.resources('posts', '/api/posts',controller.posts); }; 
控制器
  1. 解析request参数
  2. 校验参数
  3. 调用service
  4. 返回结果
'use strict'; // const Controller = require('egg').Controller; const httpController = require('./base/http'); // GET /posts -> app.controller.posts.index // GET /posts/new -> app.controller.posts.new // GET /posts/:id -> app.controller.posts.show // GET /posts/:id/edit -> app.controller.posts.edit // POST /posts -> app.controller.posts.create // PUT /posts/:id -> app.controller.posts.update // DELETE /posts/:id -> app.controller.posts.destroy const createRule = { 
    // 参数校验 title: { 
    type: 'string' }, content: { 
    type: 'string' }, } const updateRule = { 
    title: { 
    type: 'string', required: false }, content: { 
    type: 'string', required: false }, } class PostsController extends httpController { 
    async create() { 
    // 创建文章 const { 
    ctx } = this; const requestBody = ctx.request.body; try { 
    this.ctx.validate(createRule); const res = await ctx.service.posts.create(requestBody); this.success(res); } catch (err) { 
    // console.log('=======', err) this.fail(err) } } async index() { 
   // 读取所有文章 const { 
    ctx } = this; ctx.body = await ctx.service.posts.find({ 
   }); } async show() { 
    const { 
    ctx } = this; try { 
    const params_id = ctx.params.id; const res = await ctx.service.posts.find({ 
    _id: params_id }); this.success(res); } catch (err) { 
    this.fail(err); } } async update() { 
    // 更新文章 const { 
    ctx } = this; // console.log('================', ctx.request.body) try { 
    const params_id = ctx.params.id; const requestBody = ctx.request.body; ctx.validate(updateRule); const res = await ctx.service.posts.update({ 
    _id: params_id, }, { 
    $set: { 
    ...requestBody } }); this.success(res); } catch (err) { 
    this.fail(err); } } async destroy() { 
    // 删除文章 const { 
    ctx } = this; // console.log('------------', ctx.model); try { 
    const params_id = ctx.params.id; const res = await ctx.service.posts.remove({ 
    _id: params_id }); this.success(res); } catch (err) { 
    this.fail(err); } } } module.exports = PostsController; 
base controller
  1. 对controller的一种抽象
  2. 抽取通用逻辑
// controller/base/http.js 'use strict'; const Controller = require('egg').Controller; class HttpController extends Controller { 
    success(data) { 
    // msg 和 code这样的2个字段 在所有的请求里面都需要返回。 // 好好理解oop this.ctx.body = { 
    msg: data && data.msg || 'success', code: 0, data } } fail(data) { 
    this.logger.error(data) this.ctx.body = { 
    msg: data && data.msg || 'fail', code: data && data.code || 1, data } } } module.exports = HttpController; 
model
  1. 对数据模型的描述和创建
// {app_root}/app/model/user.js module.exports = app => { 
    const mongoose = app.mongoose; const Schema = mongoose.Schema; const postsSchema = new Schema({ 
    title: { 
    type: String, unique: true }, content: { 
    type: String }, }); return mongoose.model('Posts', postsSchema); } 
service
  1. 具体操作数据库的逻辑
  2. 进行增删改查,并暴露方法给控制器调用
const Service = require('egg').Service; class PostsService extends Service { 
    async find(data) { 
    // 查 const res = await this.ctx.model.Posts.find(data); return res } async update(findData, updateData) { 
    // 改 const res = await this.ctx.model.Posts.update(findData, updateData); return res; } async remove(data) { 
    // 删除 const res = await this.ctx.model.Posts.remove(data); return res; } async create(data) { 
    // 增 // console.log(this.ctx.model) const postsInstance = new this.ctx.model.Posts({ 
    title: data.title, content: data.content }); const res = await postsInstance.save(); return res; } } module.exports = PostsService; 

未来展望

增删改查只是服务端的冰山一角,希望同学们能持续的学习。

  • 登录,鉴权,用户
  • 服务部署
  • 监控预警,日志分析系统
  • 数据库优化
  • 多进程,分布式集群
  • 大数据处理,分析
到此这篇Web应用开发框架-egg进阶与实战(二)02——环境配置与数据库初始化、编写schema、service逻辑提取的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • KDD‘22推荐系统论文梳理(24篇研究&36篇应用论文)2024-11-27 17:36:08
  • 如何压缩视频?5种超简单的方法!2024-11-27 17:36:08
  • 我的入伍前的生活回忆录(一)2024-11-27 17:36:08
  • Java中的AI与大数据集成应用_java中的ai与大数据集成应用有哪些2024-11-27 17:36:08
  • 人工智能与大数据:区别与联系_人工智能与大数据的区别和联系2024-11-27 17:36:08
  • 《第一行代码》 第八章:应用手机多媒体2024-11-27 17:36:08
  • 快应用中心是个什么软件(快应用中心是干什么的?)2024-11-27 17:36:08
  • 快应用中心下载安装(快应用中心下载安装 app)2024-11-27 17:36:08
  • msp432单片机(msp430单片机应用)2024-11-27 17:36:08
  • ldr指令和ldr伪指令有什么不同(ldr伪指令与ldr加载指令的功能和应用有何区别)2024-11-27 17:36:08
  • 全屏图片