2017-10-15 10 views
0
내가 그들의 목적에 의해 내 라우터를 분할하기로 결정

와 코아 - 라우터를 분리, 그래서 그들은 다음과 같이 결합하는 방법 :타이프 라이터

라우터/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 내 app.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; 

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

app.ts 이것을 달성하십시오. 누구든지 도와 줄 수 있습니까? ,

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

당신이했던 것처럼 당신은 개별적으로 각각의 라우터를 구현할 수 있습니다

+0

나는 잠시 뒤로이 유틸리티를 썼다. 궁금한 점을 들어서이 [answer] (https://stackoverflow.com/a/39301972/4033215)에서 이야기했다. – saadq

+0

@saadq bit Typescript로 어떻게 할 수 있습니까? –

답변

1

당신이 뭔가를 할 수 있습니다 다음 모든 라우터를 포함하는 새 라우터를 생성하십시오. 그런 다음 app.ts 파일에 포함시킬 수 있습니다.

0

Meseret은 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 라우터를 가져 와서 ServerApp에서 routers 목록에 추가하기 만하면됩니다.

Meseret을 사용하면 라우터를 관리하는 것보다 훨씬 많은 작업을 수행 할 수 있습니다. Koa 세션, 정적 캐싱, 공용 디렉토리 서비스, 응답 압축 등을 지원합니다. 또한 예상대로 응용 프로그램에 자신의 Koa 미들웨어를 추가 할 수있는 옵션이 있습니다.

플러스, 그것은 MongoDB에 연결하고 (당신이 ModelFactory을 사용하는 경우 심지어 몽구스 모델에 정적 유형 지원을 추가하여 - - 경로, 방법 및 정적) 당신의 Mongoose 모델을 관리 할 수 ​​있습니다.

Socket.IO 웹 소켓도 구성에서 지원됩니다.

이러한 모든 기능은 단일 ServerApp 인스턴스에서 관리됩니다.

자세한 내용은 meseret's Github page에서 확인할 수 있습니다.

노드 서버 프로젝트를 관리하는 데 도움이되기를 바랍니다.