2017-10-15 85 views
0

我决定他们的目的分裂我的路由器兴亚的路由器,所以他们看起来像这样:如何结合与分离打字稿

路由器/ homeRouter.ts

import * as Router from 'koa-router'; 

const router: Router = new Router(); 

router 
    .get('/', async (ctx, next) => { 
     ctx.body = 'hello world'; 
    }); 

export = router; 

路由器/ userRouter .TS

import * as Router from 'koa-router'; 
import UserController = require('../controller/userController'); 

const router: Router = new Router(
    { 
     prefix: 'users' 
    } 
); 

var userController = new UserController(); 

router 
    .post('/user/:email/:password', userController.signUp); 

export = router; 

有了这个,我app.ts有一个这样的导入每个路由器的一个:

app.ts

import * as Koa from 'koa'; 
import * as homeRouter from './routers/homeRouter'; 
import * as userRouter from './routers/userRouter'; 
const app: Koa = new Koa(); 
app 
    .use(homeRouter.routes()) 
    .use(homeRouter.allowedMethods()); 
app 
    .use(userRouter.routes()) 
    .use(userRouter.allowedMethods()); 
app.listen(3000); 

但我想是这样的:

app.ts

import * as Koa from 'koa'; 
import * as routers from './routers'; 
const app: Koa = new Koa(); 
app 
    .use(routers.routes()) 
    .use(routers.allowedMethods()); 
app.listen(3000); 

我不知道如何在路由器出口做到这一点。谁能帮忙?

+0

我一段时间写了一个实用程序,我在这个[answer](https://stackoverflow.com/a/39301972/4033215)中讨论过它,以防万一您好奇。 – saadq

+0

@saadq位你会如何用Typescript做到这一点? –

回答

1

你可以有这样的事情:

userRouter.ts

import * as Router from 'koa-router'; 

const router = new Router(); 
router.get('/', list); 

... 

export default router.routes(); 

routes.ts

import * as Router from 'koa-router'; 


import UserRouter from './userRouter'; 
import HomeRouter from './homeRouter'; 

const apiRouter = new Router({ prefix: '/api'}); 
apiRouter.use('/users', UserRouter); 
apiRouter.use('/home', HomeRouter); 

export default apiRouter.routes(); 

您可以分别实现每个路由器为你做了,然后生成一个包含所有路由器的新路由器。然后你可以将它包含在你的app.ts文件中。

0

Meseret是我写的一个不错的打字稿库,可以帮助您管理您的Koa服务器路由器,中间件等等。

E.g.你可以用这个替换你的app.ts

import { ServerApp } from 'meseret' 

import HomeRouter from './routers/homeRouter' 
import UserRouter from './routers/userRouter' 

new ServerApp({ 
    name: 'Your App Name', 
    httpServers: [ 
    { port: 3000 } 
    ], 
    routers: [ 
    HomeRouter, 
    UserRouter 
    ] 
}).start() // returns a Promise 

所有您需要做的就是导入您的koa-router路由器,并将它们添加到routersServerApp列表。

Meseret帮助您做的不仅仅是管理路由器。它内置了对Koa会话,静态缓存,公共目录服务,响应压缩等的支持。正如预期的那样,还有一个选项可以让您将自己的Koa中间件添加到应用程序中。

另外,它可以连接到MongoDB和帮助管理您Mongoose模型(甚至你的猫鼬模型添加静态类型的支持 - 的路径,方法和策略 - 如果你使用ModelFactory)。

Socket.IO配置中还支持web套接字。

所有这些功能都在单个ServerApp实例中管理。

请通过meseret's Github page了解更多信息。

我希望它能帮助您管理您的分布式节点服务器项目。