ექსპორტი - როგორ მოვახდინოთ დაყოფილი Koa-რუტერების გაერთიანება 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);

მაგრამ რაც მინდა ეს არის:

აპპ.ცს

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

მე არ ვიცი როგორ გავიტანო როუტერები ამ მიზნის მისაღწევად. ვინმემ შეიძლება დამეხმაროს?

პასუხი #1

შეგიძლიათ გქონდეთ მსგავსი რამ:

userRouter.ts

import * as Router from 'koa-router';

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

...

export default router.routes();

marshrutebi.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 ფაილში.

პასუხი #2

Meseret არის კარგი TypeScript ბიბლიოთეკა, რომელიც მე დავწერე და რომელიც დაგეხმარებათ თქვენი 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 რუტერები და დაამატოთ ისინი routers სიისთვის ServerApp-ში.

Meseret გეხმარებათ ბევრის გაკეთებაში, არა მხოლოდ როუტერების მართვაში. მას აქვს Koa-ის სესხების, სტატიკური ქეშირების, საჯარო დირექტორიის მომსახურების, პასუხის შეკუმშვის და სხვა მხარდაჭერა. ასევე, როგორც მოსალოდნელი იყო, არსებობს ვარიანტი, რომელიც საშუალებას გაძლევთ დაამატოთ თქვენი Koa მორეკლავი აპში.

ამ გარდა, ის შეუძლია შეაერთოს MongoDB-თან და დაგეხმაროს თქვენი Mongoose მოდელების მართვაში (შეგიძლიათ ასევე დაამატოთ სქოლური ტიპის მხარდაჭერა თქვენს mongoose მოდელებს — პარამეტრები, მეთოდები და სტატიკები — თუ იყენებთ ModelFactory).

Socket.IO ვებ-სოკეტებიც კონფიგურაციაში მხარს უჭერს.

ყველა ეს ფუნქცია მართება ერთ ServerApp ინსტანციაში.

მეტის შესახებ შეიტყვეთ მეზერეთის Github გვერდზე.

ვიმედოვნებ, ეს დაგეხმარება მართოთ თქვენი განაწილებული ნოდის სერვერის პროექტი.