/ketchup-server-scaffold

🍅用Koa实现的一个微信小程序服务端模版

Primary LanguageJavaScriptMIT LicenseMIT

ketchup-server-scaffold

Build Status codecov

一个微信小程序app后台实现的脚手架

🍅 => 🥫 => 🍝

使用手册

项目依赖

  • Node.js >= 8.12.0
  • Koa.js

如何添加新的接口控制器

本项目中控制器的实现是约定优于配置的方式,通过实现特定接口的模块文件,放在特定目录实现的。

如果要新增加一个控制器,只需要在controllers目录下增加一个新的目录,并且增加一个index.js文件,再index.js模块导出的对象中,实现两个方法,getPath和getRouter,分别返回本级路由的路径和koa-router对象,初始化的时候会自动绑定,不需要主动引用文件路径。

示例代码:

const Router = require('koa-router')
const Controller = require('../base')

const router = new Router()

router.get('/data', async (ctx) => {
  ctx.body = {
    status: true,
    msg: 'demo',
  }
})

module.exports = Controller.factory('/demo', router)

关于日志

本项目使用pino,作为日志输出工具。

输出的是json格式的日志,如果提供的参数是对象,会自动assign到输出的对象中,字符串则统一join到msg字段。

例如:

const logger = require('./lib/plugins/logger')

logger.info('hello')
// {"level":30,"time":1541992046760,"msg":"hello","pid":6387,"hostname":"liuwill-MacBook-Pro.local","v":1}

logger.info({ data: 'hello' })
// {"level":30,"time":1541992163328,"pid":6443,"hostname":"liuwill-MacBook-Pro.local","data":"hello","v":1}

关于配置

项目的配置文件位于lib/config,目录下,系统默认的配置放在index.js文件内,env.js是对process.env的封装,避免业务代码层对其的直接全局变量引用。

如果config目录下有json类型的文件,会自动加载到内容中,并且检查与NODE_ENV环境变量对应的文件名,如果有的话,会用json中的配置覆盖默认配置。

最后,在项目运行工作目录下的app.json文件,有最高的配置优先级,而且这个文件不会提交到git代码库中,开发或者运维需要的话,可以通过这个文件覆盖所有项目代码中config下的配置。

编码规范

建议使用VS Code或者其他支持editorconfig和eslint提示的ide开发本项目

开发前先安装EditorConfig for VS CodeESLint插件。

项目开发中使用两个空格作为缩进,对应配置在.editorconfig文件中配置。

eslint配置基于standard标准,根据个人风格和实践做了一些定制化配置,文件名为.eslintrc.

启动服务和测试

启动服务:

# nodemon watch模式启动服务
$ yarn run start

# 启动dev模式
$ yarn run dev

# 启动生产模式
$ make production

单元测试:

# 运行测试用例
$ yarn run test

# 测试覆盖率统计
$ yarn run coverage