Moa2 基于 koa2.x / mongoose / bluebird / ava 的开源 Web 框架

发布于 2020-10-09 20:19:04 字数 4898 浏览 1341 评论 0

Moa2 是一个基于koa2.x、mongoose、bluebird、ava 的开源 Web 框架,针对程序员的幸福感和可持续的生产力进行了优化。它允许您通过偏爱约定而不是配置来编写漂亮的代码。

技术栈

core

with database

特点

核心

  • 自动加载路由
  • 使用jsonwebtoken做用户鉴权
  • 支持migrate测试
  • 支持ava测试
  • 默认集成res.api,便于写接口
  • 集成supervisor,代码变动,自动重载
  • gulp自动监控文件变动,跑测试
  • gulp routes生成路由说明
  • 使用log4js记录日志

Env

  • production 产品模式,即部署到服务器上的
  • test 测试模式,辅助测试
  • development 开发模式,日志上会有差异

举例

$ export NODE_ENV=production && ./node_modules/.bin/supervisor ./bin/www

or

$ npm run production 

Getting Start

$ git clone --depth=1 https://github.com/moajs/moa2.git <your-project-name>
$ cd <your-project-name>
$ npm install
$ npm start

Koa 2支持3种中间件,其中async/await需要babel支持,根据koa、koa2、koa2-async和express的压测性能比较,性能不是特别好,所以默认Moa2不使用async/await

说明

  • user 是common function
  • student 是GeneratorFunction

浏览器里访问地址

使用脚手架

Install moag as Moajs scaffold

$ [sudo] npm install --global moag
$ cd <your-project-name>
$ moag <model-name> name:string password:string -k
  • for koa 2 common function
$ moag user name:string password:string -k
  • for koa2 generator
$ moag book name:string password:string -k -g
  • for koa2 async/await
$ moag cup name:string password:string -k -a

开启 async/await

async/await需要babel,所以使用 runkoa 可以暂时作为开发用,不建议产品环境使用。

$ npm run async

中间件

moa2支持2种Koa 2.x中间件

  • 根据config来加载声明式中间件
  • 指定加载目录,用于无参数或固定参数的中间件

根据 config 来加载声明式中间件

先看一下配置文件

module.exports = {  
  // db_debug: true,
  middlewares: {
    "koa-favicon": {
      "path": "sss",
      "options": {
        "maxAge": 1
      }
    },
    global: [
      'koa-favicon',
      'compress',
      'bodyparser',
      'json',
      'serve',
      'api',
      'views',
      'favicon'
    ],
  },
  
  routes:[{
    // folder: 'app/routes'
  }]
}

首先,koa-favicon是package.json里的一个包名称

"koa-favicon": "^2.0.0",

后面的即该中间件的参数,有path和options参数。这种声明方式是非常好用的,尤其是在配置文件里。

$middlewares

默认加载moa2/app/middlewares下的中间件,通过名字即可使用

比如request_logger.js

/*!
 * Moajs Middle
 * Copyright(c) 2015-2019 Alfred Sang <shiren1118@126.com>
 * MIT Licensed
 */

// 检查用户会话
module.exports = (ctx, next) => {
  const start = new Date()
  return next().then(() => {
    const ms = new Date() - start
    log(`${ctx.method} ${ctx.url} - ${ms}ms`)
  })
}

对于已有的中间件也可以这样玩,比如bodyparser.js

/*!
 * Moajs Middle
 * Copyright(c) 2015-2019 Alfred Sang <shiren1118@126.com>
 * MIT Licensed
 */

const bodyparser = require('koa-bodyparser')

// 检查用户会话
module.exports = bodyparser()

约定好即可,不需要走配置,调用更加简便。

$global_middlewares

存放所有全局使用的中间件

默认加载 project 目录下的 app/middlewares 目录

这样约定也是比较方便的

相关链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

沧笙踏歌

文章 0 评论 0

山田美奈子

文章 0 评论 0

佚名

文章 0 评论 0

岁月无声

文章 0 评论 0

暗藏城府

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文