文章目录
前言
koa-generator 是用于生成 Koa 项目骨架的生成器,虽然比较精简,但它的结构十分清晰,足以满足一般的开发需求。
一、与express的区别
koa实际也是express的升级版本
express-generator 提供的功能如下
- 生成项目骨架,集成必要的中间件。
- 约定目录结构。
- 支持 css 预处理器。
koa-generator 提供的功能如下
- 生成项目的骨架,集成必要的中间件。
- 约定目录结构(和 express-generator 约定的结构一模一样)
两个生成器共同支持的项目骨架描述如下
- app.js 为入口
- bin/www 为启动入口
- 支持静态服务器,即 publish 目录
- 支持 routes 目录
- 支持 views 视图目录
- 默认将 Pug (之前的名字是 Jade)作为模板引擎。
二、使用步骤
安装 Koa 生成器
npm install -g koa-generator
koa-generator 支持 v1 和 v2两个版本 ,安装后可使用 koa 和 koa2 命令创建 Koa 项目模板,当前以koa2版本为例
使用koa2创建项目
创建admin项目
koa2 admin
安装依赖
npm i
-
npm run start
开发阶段的脚本,使用时代码发生变动,需要重新启动。 -
npm run dev
也是开发阶段使用的脚本,使用时代码会发生变动, nodemon 会自动启动 Node.js 进程。 -
npm run prd
是生产环境使用的脚本,通过 pm2 来启动工程,默认按照 CPU 核数来启动对应的进程数,是目前最流行的方式。(需全局安装pm2
,执行npm i pm2 -g
即可) -
npm run test
只会打印未实现日志,和 Express 里的用法是一样的。
PM2的使用
开启prd之后,会开启进程,需要使用pm2进行管理
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能
- 1、 pm2需要全局安装
npm install -g pm2
- 2、进入项目根目录
- 2.1 启动进程/应用
pm2 start bin/www
或pm2 start app.js
- 2.2 重命名进程/应用
pm2 start app.js --name wb123
- 2.3 添加进程/应用
watch pm2 start bin/www --watch
- 2.4 结束进程/应用
pm2 stop www
- 2.5 结束所有进程/应用
pm2 stop all
- 2.6 删除进程/应用
pm2 delete www
- 2.7 删除所有进程/应用
pm2 delete all
- 2.8 列出所有进程/应用
pm2 list
- 2.9 查看某个进程/应用具体情况
pm2 describe www
- 2.10 查看进程/应用的资源消耗情况
pm2 monit
- 2.11 查看pm2的日志
pm2 logs
- 2.12 若要查看某个进程/应用的日志,使用
pm2 logs www
- 2.13 重新启动进程/应用
pm2 restart www
- 2.14 重新启动所有进程/应用
pm2 restart all
三、基础目录说明
配置文件package.json
package.json 是 Node.js 模块定义的核心配置文件。一般有名称,版本,依赖模块,开发方式等。
入口文件 bin/www
端口号及各种监听事件
核心文件 app.js
app.js 是 Koa 的核心文件,主要包含以下 4 个部分
- 中间件
- 路由
- 静态服务
- 视图
中间件名称 | 用途 | 加载顺序 |
---|---|---|
bodyparser | 解析 Post 类 HTTP 动词的 body 内容,加上 bodyparser 后就可以处理所有请求了 | 1 |
json | 更好的支持 JSON | 2 |
logger | 开发阶段的日志 | 3 |
koa-static | 提供 HTTP 静态托管服务 | 4 |
koa-views | 视图渲染,支持模板引擎 | 5 |
自定义的 logger 中间件 | 记录日志 | 6 |
routes 路由
实现api及mvc的文件目录
public 静态目录
存放各种静态文件的目录
views 视图
Koa 多采用 Pug 作为模板,使用时也可根据需要自行选择。
总结
Koa 支持三种中间件写法
- async 函数优先级最高,最简单易懂。
- Promise 其次。await 结合 Promise 是非常常见的,而且利用 Promise的特性是刚需,比如,通过 Promise.race 和 Promise.all 等实现并发可以在某种程度上弥补 async 函数的不足。
- Generator 主要在 Koa v1 中使用,ES6 Generator 风格的中间件非常常见。使用时可以通过 co 库来调用 ES6 Generator,由于 co 的返回值是 Promise,所以相当于重复了 await + Promise 的用法。