[英]How to combine separated Koa-Routers with Typescript
我決定按用途划分路由器,因此它們如下所示:
路由器/ 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);
我不知道如何導出路由器來實現這一目標。 有人可以幫忙嗎?
你可以有這樣的事情:
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
文件中。
Meseret是我寫的一個不錯的打字稿庫,可以幫助您管理Koa服務器路由器,中間件等等。
例如,您可以用此替換您的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
路由器,並將它們添加到ServerApp
中的routers
列表中。
Meseret不僅可以管理路由器,還能幫助您完成更多工作。 它內置了對Koa會話,靜態緩存,公共目錄服務,響應壓縮等的支持。 正如預期的那樣,還有一個選項可讓您將自己的Koa中間件添加到應用程序。
另外,它可以連接到MongoDB並幫助管理您的Mongoose模型(即使通過使用ModelFactory
,也可以向您的Mongoose模型添加靜態類型支持(路徑,方法和靜態ModelFactory
))。
配置中還支持Socket.IO Web套接字。
所有這些功能都在單個ServerApp
實例中進行管理。
在meseret的Github頁面上找到更多信息。
我希望它可以幫助您管理分布式節點服務器項目。
我不久前制作了一個實用程序,用於將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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.