diff --git a/README.md b/README.md new file mode 100644 index 0000000..923ce67 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +koa文件夹路由加载 + +## Installation + +```sh +$ npm install koa-directory-router +``` + +## Use with koa + +```js +var app = require('koa')(); +var directoryRouter = require('koa-directory-router'); +var admin = directoryRouter({ + root: path.resolve(__dirname, path.normalize('./../app/controller/admin')), + suffix: '.js', + prefix: '/v1' +}); +app.use(admin.routes()); + +忽略路由中的文件名 自定义restful参数 +``` +作者官网: +http://www.wemallshop.com \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..17dedb9 --- /dev/null +++ b/index.js @@ -0,0 +1,48 @@ +var path = require('path'); +var fs = require('fs'); +var Router = require('koa-router'); + +function walk(dir) { + dir = path.resolve(__dirname, dir); + var files = fs.readdirSync(dir); + var list = []; + for (var file of files) { + if (fs.statSync(dir + '/' + file).isDirectory()) { + list = list.concat(walk(dir + '/' + file)); + } else { + list.push(dir + '/' + file); + } + } + return list; +} + +module.exports = function (options) { + var router = new Router(); + + if (!options || typeof options.root === 'string') { + if (!path.isAbsolute(options.root)) { + options.root = path.resolve(process.cwd(), options.root); + } + } else { + throw Error('root must be specified'); + } + + options.suffix = options.suffix || '.js'; + options.prefix = options.prefix || ''; + + var paths = walk(options.root); + paths.forEach(function (value, index) { + var _path = path.relative(options.root, value); + + // 忽略路由中的文件名 自定义restful参数 + if(_path.indexOf('/') == -1){ + _path = ''; + } else { + _path = '/' + _path.slice(0, _path.lastIndexOf('/')); + } + + router.use(options.prefix + _path, require(value).routes()); + }); + + return router; +}; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..5135869 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "koa-directory-router", + "version": "1.0.3", + "description": "koa directory router", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/einsqing/koa-directory-router.git" + }, + "keywords": [ + "koa", + "koa-router", + "koa-directory-router", + "router" + ], + "author": "www.wemallshop.com", + "license": "ISC", + "bugs": { + "url": "https://github.com/einsqing/koa-directory-router/issues" + }, + "homepage": "https://github.com/einsqing/koa-directory-router#readme", + "dependencies": { + "koa-router": "^5.4.0" + } +}