From ae5a7325841f0cce6f703423757c3333193a9a43 Mon Sep 17 00:00:00 2001
From: huangwenming <1205597228@qq.com>
Date: Mon, 16 Dec 2019 14:31:48 +0800
Subject: [PATCH] feat(koa2): add the koa demos to compare koa2 and express
---
html-relevant/modules/fallback.js | 4 +
html-relevant/modules/jsModule.html | 10 +
html-relevant/modules/lib.js | 0
html-relevant/modules/main.js | 4 +
node-study/koa2/README.md | 11 +
node-study/koa2/examples/basic-use/app.js | 57 +++
node-study/koa2/examples/basic-use/express.js | 43 ++
.../koa2/examples/basic-use/statics/README.md | 11 +
node-study/koa2/package-lock.json | 436 ++++++++++++++++++
node-study/koa2/package.json | 16 +
10 files changed, 592 insertions(+)
create mode 100644 html-relevant/modules/fallback.js
create mode 100644 html-relevant/modules/jsModule.html
create mode 100644 html-relevant/modules/lib.js
create mode 100644 html-relevant/modules/main.js
create mode 100644 node-study/koa2/README.md
create mode 100644 node-study/koa2/examples/basic-use/app.js
create mode 100644 node-study/koa2/examples/basic-use/express.js
create mode 100644 node-study/koa2/examples/basic-use/statics/README.md
create mode 100644 node-study/koa2/package-lock.json
create mode 100644 node-study/koa2/package.json
diff --git a/html-relevant/modules/fallback.js b/html-relevant/modules/fallback.js
new file mode 100644
index 0000000..a57f70d
--- /dev/null
+++ b/html-relevant/modules/fallback.js
@@ -0,0 +1,4 @@
+export const repeat = (string) => `${string} ${string}`;
+export function shout(string) {
+ return `${string.toUpperCase()}!`;
+}
diff --git a/html-relevant/modules/jsModule.html b/html-relevant/modules/jsModule.html
new file mode 100644
index 0000000..4cc2169
--- /dev/null
+++ b/html-relevant/modules/jsModule.html
@@ -0,0 +1,10 @@
+
+
+
+
+ $Title$
+
+
+$END$
+
+
diff --git a/html-relevant/modules/lib.js b/html-relevant/modules/lib.js
new file mode 100644
index 0000000..e69de29
diff --git a/html-relevant/modules/main.js b/html-relevant/modules/main.js
new file mode 100644
index 0000000..a57f70d
--- /dev/null
+++ b/html-relevant/modules/main.js
@@ -0,0 +1,4 @@
+export const repeat = (string) => `${string} ${string}`;
+export function shout(string) {
+ return `${string.toUpperCase()}!`;
+}
diff --git a/node-study/koa2/README.md b/node-study/koa2/README.md
new file mode 100644
index 0000000..53afc67
--- /dev/null
+++ b/node-study/koa2/README.md
@@ -0,0 +1,11 @@
+#Koa2 知识点
+> 新一代web服务框架,用于取代express
+
+## Features
+1. 使用Promise配合async来实现异步;
+2. 采用中间件架构;
+3. 优雅的API封装;
+4. 增强错误处理;
+5. 轻量无捆绑;
+
+
diff --git a/node-study/koa2/examples/basic-use/app.js b/node-study/koa2/examples/basic-use/app.js
new file mode 100644
index 0000000..84f84f5
--- /dev/null
+++ b/node-study/koa2/examples/basic-use/app.js
@@ -0,0 +1,57 @@
+/**
+ * @file koa2 基础使用
+ * @description 主要用于和express进行对比
+ * @author hwm
+ */
+const Koa = require('koa');
+const KoaStatic = require('koa-static');
+const KoaRouter = require('koa-router');
+
+const app = new Koa();
+
+// 静态服务
+app.use(KoaStatic('./statics'));
+
+// 中间件
+app.use((context, next)=> {
+ context.body = {
+ msg: 'hello, i am koa2'
+ };
+ next();
+});
+
+// 日志
+app.use(async(context, next)=> {
+ const start = new Date().getTime();
+ await next();
+ const end = new Date().getTime();
+ console.log(`the time consuming of the gethtml api :${end - start}ms`);
+});
+
+app.use((context, next)=> {
+ if (context.url === '/gethtml') {
+ context.type = 'text/html; charset=utf-8';
+ context.body = `${context.body.msg}
`;
+ }
+ next();
+});
+
+
+// 路由
+const router = new KoaRouter();
+router.get('/html', (context, next)=> {
+ context.type = 'text/html; charset=utf-8';
+ context.body = `${context.body.msg}
`;
+ next();
+});
+app.use(router.routes());
+
+
+app.listen(3000, err => {
+ if (!err) {
+ console.log('server is listenning on port 3000');
+ }
+ else {
+ console.log('server fails to start on port 3000');
+ }
+});
diff --git a/node-study/koa2/examples/basic-use/express.js b/node-study/koa2/examples/basic-use/express.js
new file mode 100644
index 0000000..9cd37ed
--- /dev/null
+++ b/node-study/koa2/examples/basic-use/express.js
@@ -0,0 +1,43 @@
+/**
+ * @file express 基础使用
+ * @description 主要用于和koa进行对比
+ * @author hwm
+ */
+const express = require('express');
+const router = express.Router();
+
+const app = new express();
+
+// 静态服务
+app.use(express.static('./statics'));
+
+// 路由
+app.get('/gethtml', (req, res)=> {
+ res.type('html');
+ res.send(`hello, i am express
`);
+});
+
+// invoked for any requests passed to this router
+router.use(function (req, res, next) {
+ // .. some logic here .. like any other middleware
+ next()
+});
+
+// will handle any request that ends in /events
+// depends on where the router is "use()'d"
+router.get('/events', function (req, res, next) {
+ // ..
+});
+
+// only requests to /calendar/* will be sent to our "router"
+app.use('/calendar', router);
+
+
+app.listen(3001, err => {
+ if (!err) {
+ console.log('server is listenning on port 3001');
+ }
+ else {
+ console.log('server fails to start on port 3001');
+ }
+});
diff --git a/node-study/koa2/examples/basic-use/statics/README.md b/node-study/koa2/examples/basic-use/statics/README.md
new file mode 100644
index 0000000..53afc67
--- /dev/null
+++ b/node-study/koa2/examples/basic-use/statics/README.md
@@ -0,0 +1,11 @@
+#Koa2 知识点
+> 新一代web服务框架,用于取代express
+
+## Features
+1. 使用Promise配合async来实现异步;
+2. 采用中间件架构;
+3. 优雅的API封装;
+4. 增强错误处理;
+5. 轻量无捆绑;
+
+
diff --git a/node-study/koa2/package-lock.json b/node-study/koa2/package-lock.json
new file mode 100644
index 0000000..62db7ea
--- /dev/null
+++ b/node-study/koa2/package-lock.json
@@ -0,0 +1,436 @@
+{
+ "name": "koa2",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
+ "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+ "requires": {
+ "mime-types": "2.1.25",
+ "negotiator": "0.6.2"
+ }
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+ },
+ "cache-content-type": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/cache-content-type/download/cache-content-type-1.0.1.tgz",
+ "integrity": "sha1-A1zeKwjuISn0qDFeqPAKANuhRTw=",
+ "requires": {
+ "mime-types": "2.1.25",
+ "ylru": "1.2.1"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz",
+ "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz",
+ "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+ },
+ "cookies": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npm.taobao.org/cookies/download/cookies-0.8.0.tgz?cache=0&sync_timestamp=1570851738996&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookies%2Fdownload%2Fcookies-0.8.0.tgz",
+ "integrity": "sha1-EpPOSzkXQKhAbjyYcOgoxLVPP5A=",
+ "requires": {
+ "depd": "2.0.0",
+ "keygrip": "1.1.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npm.taobao.org/depd/download/depd-2.0.0.tgz",
+ "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8="
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
+ "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz?cache=0&sync_timestamp=1575872560040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "error-inject": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz",
+ "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "http-assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/http-assert/download/http-assert-1.4.1.tgz",
+ "integrity": "sha1-xfcl1neqfoc+9zYZm4lobM6zeHg=",
+ "requires": {
+ "deep-equal": "1.0.1",
+ "http-errors": "1.7.3"
+ }
+ },
+ "http-errors": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz",
+ "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY=",
+ "requires": {
+ "depd": "1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": "1.5.0",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
+ "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
+ },
+ "is-generator-function": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.7.tgz",
+ "integrity": "sha1-0hMuUpuwAAp/gHlNS99c1eWBNSI="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "keygrip": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/keygrip/download/keygrip-1.1.0.tgz",
+ "integrity": "sha1-hxsWgdXhWcYqRFsMdLYV4JF+ciY=",
+ "requires": {
+ "tsscmp": "1.0.6"
+ }
+ },
+ "koa": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npm.taobao.org/koa/download/koa-2.11.0.tgz?cache=0&sync_timestamp=1572232118391&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkoa%2Fdownload%2Fkoa-2.11.0.tgz",
+ "integrity": "sha1-/lpRxG9WbSdjLdXcj9XX3UT5NaQ=",
+ "requires": {
+ "accepts": "1.3.7",
+ "cache-content-type": "1.0.1",
+ "content-disposition": "0.5.3",
+ "content-type": "1.0.4",
+ "cookies": "0.8.0",
+ "debug": "3.1.0",
+ "delegates": "1.0.0",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "error-inject": "1.0.0",
+ "escape-html": "1.0.3",
+ "fresh": "0.5.2",
+ "http-assert": "1.4.1",
+ "http-errors": "1.7.3",
+ "is-generator-function": "1.0.7",
+ "koa-compose": "4.1.0",
+ "koa-convert": "1.2.0",
+ "on-finished": "2.3.0",
+ "only": "0.0.2",
+ "parseurl": "1.3.3",
+ "statuses": "1.5.0",
+ "type-is": "1.6.18",
+ "vary": "1.1.2"
+ }
+ },
+ "koa-compose": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/koa-compose/download/koa-compose-4.1.0.tgz",
+ "integrity": "sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc="
+ },
+ "koa-convert": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz",
+ "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=",
+ "requires": {
+ "co": "4.6.0",
+ "koa-compose": "3.2.1"
+ },
+ "dependencies": {
+ "koa-compose": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz",
+ "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=",
+ "requires": {
+ "any-promise": "1.3.0"
+ }
+ }
+ }
+ },
+ "koa-router": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npm.taobao.org/koa-router/download/koa-router-7.4.0.tgz",
+ "integrity": "sha1-ruH3rcAtXLMdfWdGXJ6syCXoxeA=",
+ "requires": {
+ "debug": "3.1.0",
+ "http-errors": "1.7.3",
+ "koa-compose": "3.2.1",
+ "methods": "1.1.2",
+ "path-to-regexp": "1.8.0",
+ "urijs": "1.19.2"
+ },
+ "dependencies": {
+ "koa-compose": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz",
+ "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=",
+ "requires": {
+ "any-promise": "1.3.0"
+ }
+ }
+ }
+ },
+ "koa-send": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/koa-send/download/koa-send-5.0.0.tgz",
+ "integrity": "sha1-XoRB4H71VzdzTXztJbhC5QZG5+s=",
+ "requires": {
+ "debug": "3.1.0",
+ "http-errors": "1.7.3",
+ "mz": "2.7.0",
+ "resolve-path": "1.4.0"
+ }
+ },
+ "koa-static": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/koa-static/download/koa-static-5.0.0.tgz",
+ "integrity": "sha1-XpL8lrU3rVIZ9CUxnJW2R3J3aUM=",
+ "requires": {
+ "debug": "3.1.0",
+ "koa-send": "5.0.0"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "mime-db": {
+ "version": "1.42.0",
+ "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.42.0.tgz",
+ "integrity": "sha1-PiUpB7THrbkGWXtLZWNics+ee6w="
+ },
+ "mime-types": {
+ "version": "2.1.25",
+ "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.25.tgz?cache=0&sync_timestamp=1573568362177&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.25.tgz",
+ "integrity": "sha1-OXctRmIfk+KoCoVsU7hqYhVqZDc=",
+ "requires": {
+ "mime-db": "1.42.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
+ "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+ "requires": {
+ "any-promise": "1.3.0",
+ "object-assign": "4.1.1",
+ "thenify-all": "1.6.0"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
+ "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "only": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npm.taobao.org/only/download/only-0.0.2.tgz",
+ "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q="
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
+ "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "resolve-path": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/resolve-path/download/resolve-path-1.4.0.tgz",
+ "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=",
+ "requires": {
+ "http-errors": "1.6.3",
+ "path-is-absolute": "1.0.1"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.5.0"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
+ "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY="
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
+ "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "thenify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz",
+ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+ "requires": {
+ "any-promise": "1.3.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "requires": {
+ "thenify": "3.3.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz",
+ "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM="
+ },
+ "tsscmp": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/tsscmp/download/tsscmp-1.0.6.tgz",
+ "integrity": "sha1-hbmVg6w1iexL/vgltQAKqRHWBes="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
+ "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.25"
+ }
+ },
+ "urijs": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npm.taobao.org/urijs/download/urijs-1.19.2.tgz",
+ "integrity": "sha1-+b4J8AxMUTS3yzz0dcHdOUUmJlo="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "ylru": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz",
+ "integrity": "sha1-9Xa2M0FUeYnB3nuiiHYJI7J/6E8="
+ }
+ }
+}
diff --git a/node-study/koa2/package.json b/node-study/koa2/package.json
new file mode 100644
index 0000000..fb32969
--- /dev/null
+++ b/node-study/koa2/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "koa2",
+ "version": "1.0.0",
+ "description": "koa2 demos to introduce koa2 features",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "koa": "^2.11.0",
+ "koa-router": "^7.4.0",
+ "koa-static": "^5.0.0"
+ }
+}