如何结合与分离打字稿
问题描述:
我决定他们的目的分裂我的路由器兴亚的路由器,所以他们看起来像这样:如何结合与分离打字稿
路由器/ 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服务器路由器,中间件等等。
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模型(甚至你的猫鼬模型添加静态类型的支持 - 的路径,方法和策略 - 如果你使用ModelFactory
)。
Socket.IO配置中还支持web套接字。
所有这些功能都在单个ServerApp
实例中管理。
请通过meseret's Github page了解更多信息。
我希望它能帮助您管理您的分布式节点服务器项目。
我一段时间写了一个实用程序,我在这个[answer](https://stackoverflow.com/a/39301972/4033215)中讨论过它,以防万一您好奇。 – saadq
@saadq位你会如何用Typescript做到这一点? –