我怎样才能将我的koa路线分成不同的文件?

我想弄清楚如何将我的路线分割成单独的文件。

我到目前为止,但它不工作。 当我尝试访问http://localhost:3001/api/things时,我只是得不到

 //server.js var koa = require('koa'); var app = koa(); var router = require('koa-router'); app.use(router(app)); require('./routes')(app); // routes.js module.exports = function *(app){ app.use('/api/things', require('./api/things')); }; // api/things/index.js var Router = require('koa-router'); var router = new Router({ prefix: '/api/things' }); router.get('/', function *(){ this.body = [{ name: 'Foo'}, { name: 'Bar' }]; }); module.exports = router; 

对于任何读这个的人来说,谁对Koa 2.X中的如何操作感到好奇:

app.js

 import Koa from 'koa' import rootRouter from './routes/root' import userRouter from './routes/user' const app = new Koa() app.use(rootRouter.routes()) app.use(rootRouter.allowedMethods()) app.use(userRouter.routes()) app.use(userRouter.allowedMethods()) export default app 

路线/ root.js

 import Router from 'koa-router' const router = new Router() router.get('/', async (ctx, next) => { ctx.body = 'Hello' }) export default router 

路线/ user.js的

 import Router from 'koa-router' const router = new Router({ prefix: '/user' }) router.get('/', async (ctx, next) => { ctx.body = 'Some User' }) export default router 

如果你想避免重复routes()allowedMethods() ,你可以使用koa-compose来组合中间件。 为了简单起见,我围绕它做了一个包装 ,以简化与koa-router 。 使用它看起来像这样:

app.js

 import Koa from 'koa' import router from './routes' const app = new Koa() app.use(router) export default app 

路线/ index.js

 import combineRouters from 'koa-combine-routers' import rootRouter from './root' import userRouter from './user' const router = combineRouters([ rootRouter, userRouter ]) export default router 

它会做同样的事情。

server.js

 var app = require('koa')(); var router = require('./routes'); app.use(router.routes()); app.use(router.allowedMethods()); app.listen(3000); 

routes.js

 var router = require('koa-router')(); router.get('/', function* () { this.body = 'router test'; }); module.exports = router; 

像这样的东西应该工作:

 // app.js var koa = require('koa'), app = koa(); require('./routes1')(app); require('./routes2')(app); app.listen(3000); // routes1.js var Router = require('koa-router'); function register (app) { var router = new Router({ prefix: '/api' }); router.get('/', ...); // responds to "/api" router.get('/messages', ...); // responds to "/api/messages" app.use(router.routes()); app.use(router.allowedMethods()); } module.exports = register // routes2.js var Router = require('koa-router'); function register (app) { var router = new Router(); router.get('/', ...); // responds to "/" app.use(router.routes()); app.use(router.allowedMethods()); } module.exports = register 

以下是我最终的结果:

 //server.js 'use strict'; var koa = require('koa'); var app = koa(); var serve = require('koa-static'); var path = require('path'); var router = require('koa-router'); var cfg = require('./config'); var mw = require('./middleware'); app.use(serve(path.resolve(__dirname, '../client'))); app.use(mw.requestTime('Response-time')); app.use(router(app)); app.use(cfg.db.connect); require('./routes')(app); app.get('/api', function *(){ this.body = 'Welcome to API v1'; }); app.use(cfg.db.close); app.listen(cfg.env.port); //routes.js module.exports = function (app){ app.use(require('./api/things').routes()); }; // api/things/index.js var Router = require('koa-router'); var router = new Router({ prefix: '/api/things' }); var ctrl = require('./controllers'); router.get('/', ctrl.list); router.get('/:id', ctrl.get); router.post('/', ctrl.post); router.put('/:id', ctrl.put); router.del('/:id', ctrl.del); module.exports = router; // api/things/controllers.js var r = require('rethinkdb'); var http = require('http'); var parse = require('co-body'); var ctrl = module.exports = {}; ctrl.list = function *(next){ }; ctrl.get = function *(next){ }; ctrl.post = function *(next){ }; ctrl.put = function *(next){ }; ctrl.del = function *(next){ }; 

我认为TJ在做这件事的时候记住了简单的方法

koa,koa路线,koa山

使用小型独立应用程序,以您喜欢的方式进行安装:

index.js

 var app = require('./app') app.listen(3000); 

app.js

 const Koa = require('koa') const _ = require('koa-route') const mount = require('koa-mount') const app = new Koa() const pets = require('./pets') // sub apps app.use(mount('/pets', pets)) // root app app.use(_.get('/', function(){ this.body = "hello"; })) module.exports = app; 

pets.js

 var Koa = require('koa'); var _ = require('koa-route'); var app = new Koa(); app.use(_.get('/', ctx => ctx.body = "pets" )); app.use(_.get('/:name', (ctx, name) => ctx.body = "pet: "+ name)); module.exports = app;