본문 바로가기

내용 복습/Node.js

express 5 변경점 정리

이번에 게임 개발팀에 들어가 서버를 만들게 되었는데, express가 올해 중순에 5버전으로 업데이트되었다는 소식을 듣고 이번 프로젝트에서 써보기 위해 변경점을 정리해보고자 한다.

 

일단 나는 4버전만 경험해봤고, 10년전의 3 -> 4의 마이그레이션보단 변경점이 적다고 한다. 아마 프레임워크가 많이 안정되어 있는 모양. 이번 프로젝트에서 prisma를 이용해 typescript도 적용해봐야 해서 할 게 많다.

 

제로초님의 유튜브 영상에 따르면 중구난방이던 메소드를 규격화하여 정리한 느낌이라고 합니다. api에 정규표현식이 들어가는 것을 수정했고, 써보지는 않았지만 기본적으로 이렇게 쓰면 응답속도가 느려진다고 한다. 특정 문법의 에러처리에 try-catch를 쓰지 않아도 처리가 되도록 수정했다고 하는데 기대가 됩니다. 특히 이렇게 버전이 변경될 때는 메서드의 기본값이 변경된 경우가 있으니 그부분을 중점으로 확인하는게 좋다고 하시네요.

 

1. 제거된 메서드

1. app.del() 

이제 이 함수를 쓰면 오류가 발생합니다. 이제 HTTP DELETE 라우트를 등록하려면 app.delete() 함수를 사용하면 된다.

2. app.param(fn)

이것은 app.params(name, fn) 함수의 작동을 수정하는 데에 사용되었는데, 이제 지원되지 않습니다.

3. 복수형 메소드로 변환

  • req.acceptsCharset()는 req.acceptsCharsets()로 대체되었습니다.
  • req.acceptsEncoding()은 req.acceptsEncodings()로 대체되었습니다.
  • req.acceptsLanguage()는 req.acceptsLanguages()로 대체되었습니다.

4. req.param(name)

양식 데이터 검색을 위한 이 메서드는 제거되었습니다. 이제는 req.bady, req.params, req.query로 객체에서 제출된 매개변수 이름을 구체적으로 확인해야합니다.

5. res.json(obj, status)

이제 이 형태는 지원하지 않고 res.status(status).json(obj)의 형태로 res.json() 메소드에 체인해야 합니다.

6. res.send(body, status)

역시 이런 형태를 지원하지 않고 res.status(status).json(obj)의 형태로 res.json() 메소드에 체인해야 합니다.

7. res.sendfile()

이제 이 메서드는 camel case로 바뀌어 res.sendFile()로 씁니다.

 

2. 변경된 항목

1. app.router()

4버전에서 제거되었던 app.router() 객체가 돌아왔습니다. 명시적 역할을 했던 3버전과 달리 5버전에선 단순히 기본 Express 라우터에 대한 참조 역할만 합니다.

 

2. req.host()

Express 4에서, 포트 번호가 존재하는 경우 req.host 함수는 포트 번호를 올바르지 않게 제거했습니다. Express 5에서는 포트 번호가 유지됩니다.

 

3 . 개선된 항목

1. res.render()

이 메소드는 이제 모든 보기 엔진에 대해 비동기식 작동을 적용하며, 동기식 구현을 갖는 보기 엔진 및 권장되는 인터페이스를 위반하는 보기 엔진에 의한 버그의 발생을 방지합니다.