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