izvoz - Kako kombinirati odvojene Koa-Routere s Typescriptom


Odlučio sam razdvojiti svoje rutere prema njihovoj svrsi, tako da izgledaju ovako:

ruteri/homeRouter.ts

import * as Router from 'koa-router';

const router: Router = new Router();

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

export = router;

ruteri/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;

S ovim, moj app.ts mora uvoziti svaki od rutera jedan po jedan ovako:

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);

Ali ono što želim je ovo:

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);

Ne znam kako izvesti rutere da bih to postigao. Može li netko pomoći?

Odgovor #1

Možete imati nešto ovako:

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();

Svaki router možete implementirati zasebno kao što ste to učinili, zatim generirati novi router koji uključuje sve vaše routese. Zatim ga možete uključiti u svoju datoteku app.ts.

Odgovor #2

Meseret je lijepa TypeScript biblioteka koju sam napisao i koja vam može pomoći u upravljanju vašim Koa poslužiteljskim rutama, middlewareom i još mnogo toga.

Na primjer, možete zamijeniti svoj app.ts s ovim.

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

Sve što trebate učiniti je samo uvesti svoje koa-router rutere i dodati ih na popis routers u ServerApp.

Meseret vam pomaže raditi mnogo više od upravljanja usmjerivačima. Ima ugrađenu podršku za Koa sesije, predmemoriranje statičkog sadržaja, posluživanje javnog direktorija, kompresiju odgovora i još mnogo toga. Također postoji, kao što se očekivalo, opcija koja vam omogućuje dodavanje vlastitog Koa middleware-a u aplikaciju.

Osim toga, može se povezati s MongoDB-om i pomoći pri upravljanju vašim Mongoose modelima (čak i dodavanjem podrške za statičke tipove vašim mongoose modelima--putanje, metode i statike--ako koristite ModelFactory).

Socket.IO web socketi su također podržani u konfiguraciji.

Sve ove značajke upravljaju se u jednoj ServerApp instanci.

Saznajte više na Meseretovoj stranici na Githubu.

Nadam se da će ti pomoći u upravljanju tvojim distribuiranim projektom poslužitelja čvorova.

Povezani članci