我决定按照目的拆分我的路由器,所以它们看起来像这样:
路由器/ 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 :(得分: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
文件中。
答案 1 :(得分: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
路由器,然后将其添加到routers
中的ServerApp
列表中。
Meseret可帮助您完成比管理路由器更多的工作。它内置了对Koa会话,静态缓存,公共目录服务,响应压缩等的支持。正如预期的那样,还有一个选项可以让您将自己的Koa中间件添加到应用程序中。
另外,它可以连接到MongoDB并帮助管理您的Mongoose模型(即使为您的猫鼬模型添加静态类型支持 - 路径,方法和静态 - 如果您使用{ {1}})。
配置中也支持Socket.IO网络套接字。
所有这些功能都在一个ModelFactory
实例中进行管理。
在meseret's Github page了解详情。
我希望它可以帮助您管理分布式节点服务器项目。
答案 2 :(得分:0)
I made a utility一段时间用于将koa-router
的多个实例组合到一个中间件中,我刚刚添加了一个TypeScript定义文件,因此它应该可用于TS人员。只需npm install koa-combine-routers
,就像这样使用它:
用法:
<强> app.js 强>
import * as Koa from 'koa'
import router from './router'
const app = new Koa()
app.use(router())
<强> routes.js 强>
import * as Router from 'koa-router'
import * as combineRouters from 'koa-combine-routers'
const dogRouter = new Router()
const catRouter = new Router()
dogRouter.get('/dogs', async ctx => {
ctx.body = 'ok'
})
catRouter.get('/cats', async ctx => {
ctx.body = 'ok'
})
const router = combineRouters(
dogRouter,
catRouter
)
export default router
这将同时使用.routes()
和.allowedMethods()
。