分享个人 Full-Stack JavaScript 项目开发经验
我们可以通过koa-generator模块快速生成一个简单的 Koa 项目。
全局安装 Koa 应用生成器
npm install -g koa2-generator
生成指定项目目录,如 server:
koa2 server
为项目安装依赖
cd server
yarn install
查看 package.json,可以知道它配置的基础模块:
{
"name": "server",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "node bin/www",
"dev": "./node_modules/.bin/nodemon bin/www",
"prd": "pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"debug": "^2.6.3",
"koa": "^2.2.0",
"koa-bodyparser": "^3.2.0",
"koa-convert": "^1.2.0",
"koa-json": "^2.0.2",
"koa-logger": "^2.0.1",
"koa-onerror": "^1.2.1",
"koa-router": "^7.1.1",
"koa-static": "^3.0.0",
"koa-views": "^5.2.1",
"pug": "^2.0.0-rc.1"
},
"devDependencies": {
"nodemon": "^1.8.1"
}
}
在 package.json 中配置了一些启动脚本,如 start、dev 等。这样我们可以使用 npm run start 或 npm run dev 启动项目。另外是一些依赖模块和开发依赖。
debug:
基于 node 核心调试技术的小型调试实用工具。以 Windows 下 CMD 设置为例:
set DEBUG=*,-not_this & npm run start
首先设置了环境变量 DEBUG,除 not_this 外的其它。然后运行项目。在创建项目的 bin/www 启动文件中,我们可以看到:
var debug = require('debug')('demo:server')
// ...
debug('Listening on ' + bind);
'demo:server' 为 DEBUG 的命名空间,与环境变量对应。显示指定命名空间下的调试信息,可以这样设置:
set DEBUG=demo:server
koa:
koa 核心模块,不包含任何中间件。
koa-bodyparser:
请求体解释中间件。如果没有内容,返回一个空对象 { }。默认值如下:
app.use(bodyparser({
enableTypes: ['json', 'form'],
encode: 'utf-8',
formLimit: '56kb',
jsonLimit: '1mb',
strict: true
}));
详细请查看 koa-bodyparser 的使用说明。
koa-convert:
koa 0.x & 1.x 的 generator 中间件和 2.x 的 promise 中间件之间的转换模块。
koa-json:
格式化 JSON 响应的中间件,也负责将 node 的对象转换成二进制流。它的参数如下:
app.use(json({
pretty: false,
param: 'pretty',
spaces: 2
}));
参数 pretty 设置是否格式化响应 JSON 数据。当 pretty 参数为 false,设置参数 param,当请求路径带有该查询字符串时,如 /?pretty, 会格式化响应 JSON。参数 spaces 用于设置格式化时缩进使用空格数,有效值为1至10,默认为2。(在接口数据调试时使用会较多。)
koa-logger:
开发风格的日志中间件,让控制台自动输出请求和响应的基本信息。(应放在所有路由中间件之前,生产环境下关闭。)
--> GET / 200 960ms 1.9kb
<-- GET /users
koa-onerror:
错误处理模块。自动将错误的状态码和头部作为响应的状态码和头部。它默认会渲染一个模板 html 作为响应,在开发环境下还会带有错误信息。它允许你重写自己的错误响应。如发生错误时渲染路径为 ./views/50x.html 的自定义(swig)模板:
onerror(app, {
template: './views/50x.html'
});
详细请查看 koa-onerror 的使用说明。(如果你使用了 nginx 代理的错误拦截,那么只需要确保相应的状态码正确即可。)
koa-router:
路由中间件。(在构建的项目中可以看到,在路由中直接响应客服端的请求。如果你不想路由变得过于复杂,可以再分出一层控制器。业务逻辑在控制器中完成,路由仅仅作为控制器的导向。)
koa-static:
静态文件服务中间件。(如果你有 nginx 作为静态文件的代理,可以去掉这模块。)
koa-views:
模板渲染中间件。(也可以直接使用自己的模板引擎中间件。)
pug:
服务器端模板引擎 pug,由 jade 改名。(根据项目需求,可以使用如 handlebars 等其它模板引擎。)