이것은 큰 질문이며 완성되기 위해서는 긴 답변이 필요하므로 가장 중요한 차이점 중 일부만 다루겠습니다. 여전히 긴 답변이라고 사과합니다.
그것들은 어떻게 비슷합니까?
당신이 말할 때 당신은 절대적으로 옳습니다 :
기본 예제의 경우 비슷해 보입니다.
두 프레임 워크 모두 동일한 기본 문제를 해결합니다. 노드에 HTTP 서버를 빌드하기위한 편리한 API 제공. 즉, 하위 레벨 기본 http
모듈 만 사용하는 것보다 편리합니다 . http
모듈은 우리가 원하는 모든 것을 할 수 있지만와 쓰기 응용 프로그램에 지루한입니다.
이를 위해 라우팅, 핸들러, 플러그인, 인증 모듈과 같은 고급 웹 프레임 워크에서 오랫동안 사용되어 온 개념을 사용합니다. 그것들은 항상 같은 이름을 가지고 있지는 않았지만 거의 동일합니다.
대부분의 기본 예제는 다음과 같습니다.
- 경로 만들기
- 경로 요청시 기능을 실행하여 응답 준비
- 요청에 응답
표현하다:
app.get('/', function (req, res) {
getSomeValue(function (obj) {
res.json({an: 'object'});
});
});
하피 :
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
getSomeValue(function (obj) {
reply(obj);
});
}
});
차이점은 바로 여기에 획기적인 것이 아닌가? 그렇다면 왜 다른 것을 선택해야합니까?
그것들은 어떻게 다릅니 까?
간단한 대답은 hapi가 훨씬 더 많으며 기본적으로 훨씬 더 많은 기능을 수행한다는 것입니다. 위에서 간단한 예제를 볼 때 명확하지 않을 수 있습니다. 실제로 이것은 의도적 인 것입니다. 간단한 경우는 단순하게 유지됩니다. 따라서 몇 가지 큰 차이점을 살펴 보겠습니다.
철학
Express는 매우 최소화되도록 고안되었습니다. 에 약간의 먼지를 뿌리는 작은 API를 제공 http
함으로써 추가 기능을 추가하는 측면에서 여전히 많은 부분을 차지합니다. 들어오는 요청의 본문을 읽으려면 (공통 작업) 별도의 모듈 을 설치해야 합니다 . 다양한 콘텐츠 유형이 해당 경로로 전송 될 것으로 예상되는 경우 Content-type
헤더를 확인 하여 헤더를 확인하고 그에 따라 구문 분석해야합니다 (예 : 양식 데이터 대 JSON 대 다중 부분). .
hapi에는 코드를 작성하지 않고 구성 옵션을 통해 노출되는 다양한 기능 세트가 있습니다. 예를 들어, 핸들러가 실행되기 전에 요청 본문 (페이로드)이 메모리로 완전히 읽혀지고 적절하게 구문 분석 (콘텐츠 유형에 따라 자동으로)되도록하려면 간단한 옵션입니다 .
server.route({
config: {
payload: {
output: 'data',
parse: true
}
},
method: 'GET',
path: '/',
handler: function (request, reply) {
reply(request.payload);
}
});
풍모
hapi가 더 큰 기능 세트를 제공하는지 확인하려면 두 프로젝트의 API 문서 만 비교하면됩니다.
hapi에는 Express에서 제공하지 않는 다음과 같은 내장 기능이 포함되어 있습니다.
확장 성 및 모듈성
hapi와 Express는 상당히 다른 방식으로 확장 성을 추구합니다. Express를 사용하면 미들웨어 기능이 있습니다. 미들웨어 함수는 일종의 필터와 비슷하며 처리기를 치기 전에 모든 요청이 필터를 통과합니다.
hapi에는 요청 수명주기가 있으며 확장 점을 제공 하는데, 이는 미들웨어 기능과 비교할 수 있지만 요청 수명주기에 정의 된 여러 지점이 있습니다.
Walmart가 hapi를 구축하고 Express 사용을 중단 한 이유 중 하나는 Express 앱을 별도의 부분으로 나누고 다른 팀 구성원이 자신의 청크에 대해 안전하게 작업하는 것이 매우 어려웠 기 때문입니다. 이러한 이유로 그들은 hapi 에서 플러그인 시스템 을 만들었습니다 .
플러그인은 하위 애플리케이션과 같습니다. hapi 앱에서 할 수있는 모든 작업을 수행하고 경로, 확장 점 등을 추가 할 수 있습니다. 플러그인에서는 순서가 다르기 때문에 애플리케이션의 다른 부분을 중단하지 않을 수 있습니다. 경로 등록은 중요하지 않으며 충돌하는 경로를 만들 수 없습니다. 그런 다음이 플러그인을 서버에 결합하여 배치 할 수 있습니다.
생태계
Express는 기본 제공되는 기능을 거의 제공하지 않기 때문에 프로젝트에 추가해야 할 경우 외부를 살펴 봐야합니다. hapi로 작업 할 때 많은 경우에 필요한 기능은 내장되어 있거나 핵심 팀에서 만든 모듈이 있습니다.
최소한의 소리가 좋습니다. 그러나 심각한 프로덕션 앱을 구축하는 경우 결국에는이 모든 것들이 필요할 것입니다.
보안
hapi는 Walmart 팀이 Black Friday 트래픽을 실행하도록 설계되었으므로 보안과 안정성이 항상 가장 큰 관심사였습니다. 이러한 이유로 프레임 워크는 프로세스 페이로드 소진을 방지하기 위해 수신 페이로드 크기 제한과 같은 추가 작업을 많이 수행합니다. 또한 최대 이벤트 루프 지연, 사용 된 최대 RSS 메모리 및 v8 힙의 최대 크기와 같은 옵션이 있으며, 그 이상으로 서버가 충돌하지 않고 503 시간 초과로 응답합니다.
요약
그들 자신을 평가하십시오. 귀하의 요구와 두 가지 중 어떤 것이 가장 큰 관심사를 해결하는지 생각해보십시오. 두 커뮤니티 (IRC, Gitter, Github)에 관심이 있으시면 선호하는 사이트를 확인하십시오. 내 말만 듣지 마 그리고 행복한 해킹!
면책 조항 : hapi 에 관한 책 의 저자로서 편견이 있으며 위의 내용은 대부분 내 개인적인 의견입니다.