文档章节

Egg.js Restful Api 开发及配置

AaronW
 AaronW
发布于 10/14 14:11
字数 417
阅读 4
收藏 0

Egg.js Restful Api 开发

数据返回

定义基类 BaseController,在BaseController中定义统一数据格式。

'use strict';

const Controller = require('egg').Controller;

class BaseController extends Controller {
async respSuccess(data = {}, msg = '请求成功', status = 200) {
  const { ctx } = this;
  ctx.body = {
    success: true,
    msg,
    data,
  };
  ctx.status = status;
}

async respFailed(msg, data = {}, status = 200) {
  const { ctx } = this;
  ctx.body = {
    success: false,
    msg,
    data,
  };
  ctx.status = status;
}
}

module.exports = BaseController;

全局异常处理

分页插件

  • mongoose-paginate-v2
  • mongoose-aggregate-paginate

这里使用mongoose-paginate-v2是由于其查询返回的字段可以自定义名称,以下会有说明。

分页插件安装及配置

安装好分页插件,打开app.js文件,如果没有创建之。内容如下:

'use strict';

class AppBootHook {
  constructor(app) {
    this.app = app;
  }

  configDidLoad() {}
}

module.exports = AppBootHook;

方法configDidLoad为egg.js生命周期函数,具体定义在这里,插件的初始化就在这里完成。

const mongoosePaginate = require('mongoose-paginate-v2');

const mongoose = this.app.mongoose;
mongoose.plugin(mongoosePaginate);

以上配置是对所有model都会起作用,如只对单个model起作用可在Schema中使用,如下:

'use strict';

const paginate = require('mongoose-paginate-v2');
module.exports = app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;

  const UserSchema = new Schema({});
  UserSchema.plugin(paginate);
  return mongoose.model('User', UserSchema, 'user');
};

默认,分页结果会返回以下形式字段:

{
  docs": [],
  "total": 0,
  "limit": 10,
  "page": 1,
  "pages": 1
}

但是这样的格式不一定满足要求,虽然可以自己重新组装,但是每次都需要操作就比较麻烦了,不过插件提供了全局或单词设置返回数据格式的方法,如下:

configDidLoad() {
  const mongoose = this.app.mongoose;
  mongoosePaginate.paginate.options = {
    customLabels: {
      totalDocs: 'total',
      docs: 'list',
    },
  };
  mongoose.plugin(mongoosePaginate);
}


所有可重命名的参数如下:

  • totalDocs
  • docs
  • limit
  • page
  • nextPage
  • prevPage
  • totalPages
  • pagingCounter
  • meta

© 著作权归作者所有

AaronW
粉丝 3
博文 20
码字总数 5692
作品 0
杭州
程序员
私信 提问
Egg 2.14.2 发布,阿里开源的企业级 Node.js 框架

值得关注的变化 修复 bug 修复d.ts在声明上下文时不起作用的 Bug。 文档相关 改进文档。 Egg.js,为企业级框架和应用而生,是阿里开源的企业级 Node.js 框架。 设计原则 企业级应用在追求规范...

程六金
2018/12/21
746
0
基于 Koa 的企业级 Node.js 框架--Egg.js

Egg.js,为企业级框架和应用而生,是阿里开源的企业级 Node.js 框架。 设计原则 企业级应用在追求规范和共建的同时,还需要考虑如何平衡不同团队之间的差异,求同存异。阿里没有选择社区常见...

天猪
2017/02/07
16.4K
6
Egg 2.12.0 发布,阿里开源的企业级 Node.js 框架

Egg 2.12.0 已发布,Egg 是阿里开源的企业级 Node.js 框架,为企业级框架和应用而生。团队的架构师和技术负责人可以非常容易地基于自身的技术架构在其基础上扩展出适合自身业务场景的框架。 ...

王练
2018/10/11
1K
1
Egg 1.16.2 发布,阿里开源的企业级 Node.js 框架

Egg 1.16.2 发布了,Egg 是阿里开源的企业级 Node.js 框架,为企业级框架和应用而生。团队的架构师和技术负责人可以非常容易地基于自身的技术架构在其基础上扩展出适合自身业务场景的框架。 ...

王练
2018/10/10
1K
0
Egg 2.11.2 发布,阿里开源的企业级 Node.js 框架

Egg 2.11.2 发布了,Egg 是阿里开源的企业级 Node.js 框架,为企业级框架和应用而生。团队的架构师和技术负责人可以非常容易地基于自身的技术架构在其基础上扩展出适合自身业务场景的框架。 ...

局长
2018/09/24
851
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell学习记录(持续更新)

一、shell定时备份数据库任务通用脚本 目标:根据定时任务启动脚本,执行数据库备份任务,按照日期进行每日备份,如已经备份则脚本停止,备份任务完成后将结果发送邮件提醒 1.执行数据库备份...

网络小虾米
今天
3
0
PHP计算两个经纬度地点之间的距离

/** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 * @author www.Alixixi.com */function get...

子枫Eric
今天
14
0
Linux—day 4

ch2 需要掌握的命令 (1)cat -n 1.txt (2)more 1.txt (3)head -n 15 initial-setup-ks.cfg (4)tail -n 17 initial-setup-ks.cfg;tail -f initial-setup-ks.cfg (5)cat -n anaconda-ks.c......

呵呵暖茶
今天
31
0
【Kubernetes社区之路】我的PR被抢了

2019年11月的某天,我无意间发现一个PR作者在自己的PR中抱怨自己的PR没被合入,而另一个比自己提交晚且内容几乎一样的PR则被合入了。 字里行间透露些许伤感外加无奈,原文如下: 作为一名开源...

恋恋美食
今天
40
0
阻塞队列

对于许多线程问题, 可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插人元素, 消费者线程则取出它们。 使用队列, 可以安全地从一个线程向另 一个线程传递数据...

ytuan996
今天
48
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部