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" + } +}