本项目旨在提供一个纯Restful API server脚手架。本项目引入了一些koa2&node的常用库,集成了redis和mongo,包含路由、参数校验、单元测试、业务逻辑异常处理等特性
项目的由来:本人之前用Java写后台,习惯了throw Exception。使用node koa框架,也找了些网上的koa2脚手架,发现并没有一个项目能提供优雅的异常处理,故产生了此项目⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
npm start
便可启动项目,访问 localhost:7100/api/hello,若看到数据正常返回则说明启动成功;若需要热更新,则运行npm run dev
npm run build
会将项目编译至 app 目录下npm run test
会执行 test 目录下的测试用例首先编译:npm run build
,然后运行npm run pro
即可
首先编译:npm run build
,然后运行pm2 start pm2.json
即可(若没安装pm2则需要先安装npm install pm2@latest -g
)。pm2.json根据项目需要自行修改。
运行./docker-build.sh
生成 docker 镜像,接着运行 docker run --name koa2-rest-scaffold -d -p 8000:7100 koa2-rest-scaffold:latest
即可
其中,docker run
中的 name
和 -p
映射出来的端口都可以按需修改。也可以将镜像 push 到 docker 仓库在服务器上先 pull 拉取镜像再 run。
tips: docker run
时可以通过 -v somePath/production.json:/app/config/production.json
将config/production.json挂载出来,配置项和代码分离,防止敏感信息提交到代码库。logs等文件夹也应该挂载出来,保持干净的container。
引入 config 库作配置项管理,配置项文件统一放在 config 文件夹下面default.json为默认配置项,本地开发时,直接调整其中参数即可
运行命令:
npm i apidoc -g
npm run docs
用浏览器打开./apidoc/index.html
在 utils/response.js 中定义了数据的返回格式,默认如下:
{
"code": 0,
"msg": "ok",
"data": {}
}
在 utils/customError.js 中定义了 CustomError 和 HttpError,在 utils/errorCode.js 中定义了 code 和 msg 的对应关系
throw new CustomError(1001)
即可throw new HttpError(401)
即可可查看 helloController.js 中的示例
由于 Node 项目中经常会用到 redis 和 mongo,所以在本项目中引入了 ioredis 和 mongoose
如果不需要 ioredis,那么则运行npm remove ioredis -S
,然后删除src/lib/redis.js
文件并移除相应配置项即可
如果不需要 mongoose,那么则运行npm remove mongoose -S
,然后删除src/models/mongo
目录并移除相应配置项即可
import {
redis
} from '../lib/redis'
const getRedisData = async () => {
return await redis.set('a', 1)
}
import mongoose from 'mongoose'
const User = mongoose.model('User')
const saveMongoData = async () => {
const user = new User({
name: 'Tom',
age: 27
})
return await user.save()
}
tips: 如果 mongo schema 需要实现继承关系,则可以使用 mongoose-schema-extend
用于请求的参数校验
一个一致性、模块化、高性能的 JavaScript 实用工具库
一个优秀的 JavaScript 日期处理类库
koa2中间件原理 中间件的执行顺序? Koa是从第一个中间件开始执行,遇到 await next() 就进入下一个中间件,一直到执行到最后一个中间件。然后再逆序执行上一个中间件 await next() 后面的代码,一直到第一个中间件 await next() 后面的代码执行完毕才发出响应。 app.use(async (ctx, next) => { console.log('1');
在前一节的排行榜实现中,我们使用了 Mock 数据,模拟了云端服务器的数据查询和提交。 现在我们将在后端实现一个基于 Koa2 的 Web 服务器,由它来为我们 Flutter App 提供排行榜的 Web 服务接口。这样一来所有玩家看到来自全网的其它玩家排名的真实数据! 本节概要 Koa2介绍 MySQL 数据库准备 用 Koa2 实现排行逻辑 在游戏中使用真实的排行数据 我们的课程并非必需使用
const Redis = require('ioredis') const redis = { port: 6379, // Redis port host: '**', // Redis host prefix: 'pon:', //存诸前缀 ttl: 60 * 60 * 23, //过期时间 family: 4,
Koa2是现在最流行的基于Node.js平台的web开发框架,它很小,但扩展性很强。Koa给人一种干净利落的感觉,体积小、编程方式干净。国内很多知名互联网公司都在使用,BAT(百度、阿里、腾讯)全部都在使用。 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。一个Koa应用就是一个对象,包含了一个middlew
1、koa2背景 Express简介: koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本. 虽然Express的API很简单,但是它是基于ES5的语法,要实现异步代码,只有一个方法:回调。 如果异步嵌套层次过多,代码写起来就非常难看, 虽然可以用async这样的库来组织异步代码,但是用回调写异步实在是太痛苦了! koa 1.0简介: 随着新版Node.js
1. koa2 的使用教程: koa2 的使用教程: npm install koa2 使用koa2 创建项目工程: 1. koa2 (项目工程) 2. 进入项目工程: cd 进入您所创建的项目工程 3. npm install // 安装项目依赖; 4. npm start // 启动项目 2. async 和 await: async (异步) asy
基本中间件的使用 修改app.js添加代码如下: app.use(async (ctx, next)=>{ // next 参数的作用是将处理的控制权转交给下一个中间件 await next() console.log(ctx.request.url+'=='+ctx.url); ctx.response.type = 'text/html'; ctx.re
koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本。 历史 1. Express Express是第一代最流行的web框架,它对Node.js的http进行了封装,用起来如下: var express = require('express'); var app = express(); app.get('/', function (req, res) {
前言 相信很多人都用过vue-cli或create-react-app或者类似的脚手架。 脚手架方便我们复制,粘贴,或者clone代码库,而且还可以更具用户的选择,引入用户所需要的插件。 脚手架往往搭配着早已设计好了架构的项目,然后按需进行拷贝。 Yeoman 介绍 官网介绍: The web's scaffolding tool for modern webapps. yeoman是一款来做脚手
脚手架工具 脚手架是指为整个应用生成一个初始化的模板, 而不是生成访问数据库的代码. Yeoman Slush
脚手架允许我们轻松地skeleton for a web application创建skeleton for a web application 。 我们手动创建了我们的公共目录,添加了中间件,创建了单独的路径文件等。脚手架工具为我们设置了所有这些东西,以便我们可以直接开始构建我们的应用程序。 我们将使用的脚手架叫做Yeoman 。 它是为Node.js构建的脚手架工具,但也有几个其他框架的生成器
Express中的错误处理是使用中间件完成的。 但是这个中间件具有特殊属性。 错误处理中间件的定义方式与其他中间件函数的定义相同,只是错误处理函数MUST have four arguments而不是三个 - err, req, res, next 。 例如,要发送任何错误的响应,我们可以使用 - app.use(function(err, req, res, next) { console
脚手架允许我们轻松地skeleton for a web application创建skeleton for a web application 。 我们手动创建公共目录,添加中间件,创建单独的路径文件等。脚手架工具为我们设置所有这些东西,以便我们可以直接开始构建我们的应用程序。 我们将使用的脚手架叫做Yeoman 。 它是为Node.js构建的脚手架工具,但也有几个其他框架的生成器(如flask
获得脚手架 hexo.scaffold.get(name); 设置脚手架 hexo.scaffold.set(name, content); 移除脚手架 hexo.scaffold.remove(name);