초짜일 때 express vs koa2 과거 의문 사항.
- REACT & NODE
- 2021. 2. 24.
express 와 async await 그리고 error 처리
<== 이글 참조 (의문 사항에 대한 충분한 답을 적은 글.)
https://www.reddit.com/r/node/comments/8imb7q/from_express_to_koa/
express vs koa2 관련하여 질문 드립니다.
=================================
https://www.reddit.com/r/node/comments/8imb7q/from_express_to_koa/
=================================
아래에서 express 도 async 자체는 동작을 하지만 가장 마지막 middleware 단에서 하나 사용하는 정도로 사용되는 것 같습니다.
koa2 같은 경우는 middleware 자체가 코루틴을 반영하여 설계되었기 때문에 (next 함수가 promise) 각 미들웨어 간의 연결 관계가 async 방식입니다. 그래서 express 는 순차적으로 수행되는 반면 koa2 같은 경우는 미들웨어의 동작 순서가 마치 스택 처럼 거꾸로 입니다.
하지만 각 미들웨어 상에서 try catch 로 감싸줄 수 있고 try 안에 await next() 를 해주는 방식으로 그 아래에 await 하는 식으로 코드를 작성하게 되면 해당 오류가 throw 되었을 시에 그것을 전체적으로 catch 할 수 있게 됩니다. 하지만 express 의 미들웨어에서 try catch 를 할 경우 이런 오류 처리가 불가능 해보입니다.
혹시 express 로 이러한 문제를 해결하여 사용하고 계신지 문의드립니다. express 가 워낙 유명하다 보니 참고 문서도 많고 사용도 널리 되고 있어 express 를 사용하고 싶지만 아래의 try catch 구문을 사용하지 못한다면 큰 문제 같아보입니다. 이 부분이 해결되지 않는 것이라면 express 의 경우 마지막 미들웨어 (즉, router 의 res 응답 로직이 존재하는 함수 부분) 에만 async 를 적용하여 try catch 를 그 안에서만 하고 계신지 그래서 catch 되는 것은 전역적인 로깅함수 같은 것으로 처리하시는지요?
=================================
[express]
app.use("/api", PostRouter.routes());
export class PostRouter {
static routes(): Router {
return Router()
.get("/post", async (request: Request, response: Response) => {
const posts = await Post.find({}).populate("author").exec();
response.json(posts)
});
}
}
=================================
[koa2]
router.get('/api/v1/auth/intro', requireAuth, async (ctx, next) => {
try {
await next();
const users = await dao.getUser(ctx.state.user_id);
if (!users.length) {
ResponseUtil.status(200).body({message: 'no_user', data: ''}).build().send(ctx);
return;
}
} catch (err) {
throw err;
}
});
'REACT & NODE' 카테고리의 다른 글
React Native vs Android / Swift (0) | 2021.03.11 |
---|---|
React 와 함수형 프로그래밍 Functional Programming vs OOP (0) | 2021.02.25 |
IntelliJ > preferences > editor > code style > typescript > spaces > within > ES6 import/export braces (0) | 2021.02.22 |
react hoc , context api , recompose (0) | 2021.02.19 |
Cookie, Session, Auth, Token, jwt, OAuth, 인증, safari, remember_me (0) | 2021.02.19 |