export - Πώς να συνδυάσετε ξεχωριστούς Koa-Routers με 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);
Δεν ξέρω πώς να εξαγάγω τους δρομολογητές για να επιτύχω αυτό. Μπορεί κανείς να βοηθήσει;
Απάντηση #1
Μπορείς να έχεις κάτι σαν αυτό:
userRouter.ts
import * as Router from 'koa-router';
const router = new Router();
router.get('/', list);
...
export default router.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 σας.
Απάντηση #2
Το Meseret είναι μια ωραία βιβλιοθήκη TypeScript που έγραψα και μπορεί να σας βοηθήσει να διαχειριστείτε τους δρομολογητές, τα middleware και πολλά άλλα του διακομιστή 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 σας και να τους προσθέσετε στη λίστα των routers στο ServerApp.
Ο Meseret σας βοηθά να κάνετε πολύ περισσότερα από το να διαχειρίζεστε δρομολογητές. Διαθέτει ενσωματωμένη υποστήριξη για συνεδρίες Koa, στατική αποθήκευση, εξυπηρέτηση δημόσιου καταλόγου, συμπίεση απαντήσεων και πολλά άλλα. Υπάρχει επίσης, όπως αναμενόταν, μια επιλογή που σας επιτρέπει να προσθέσετε το δικό σας middleware Koa στην εφαρμογή.
Επιπλέον, μπορεί να συνδεθεί με το MongoDB και να βοηθήσει στη διαχείριση των μοντέλων Mongoose σας (ακόμα και προσθέτοντας υποστήριξη στατικού τύπου στα μοντέλα mongoose σας -- τις διαδρομές, τις μεθόδους και τα στατικά -- αν χρησιμοποιήσετε το ModelFactory).
Τα web sockets του Socket.IO υποστηρίζονται επίσης στη ρύθμιση.
Όλες αυτές οι δυνατότητες διαχειρίζονται σε ένα μόνο στιγμιότυπο ServerApp.
Μάθετε περισσότερα στη σελίδα Github του meseret.
Ελπίζω να σε βοηθήσει να διαχειριστείς το κατανεμημένο έργο διακομιστή κόμβου σου.
