모두가 내 일련의 기사를 계속 읽을 수 있기를 바랍니다. 이것은 또한 저에게 가장 큰 격려와 지원입니다. 우리는 함께 진전을 이루고, 문학을 통해 친구를 사귀고, 서로를 돕자. 좋아, 오늘의 주제로 바로 가자.
"Connect"란 무엇이며 미들웨어를 이해하는 방법은 무엇입니까? 질문이있는 오늘의 기사를 살펴 보겠습니다.
"미들웨어"를 이해하는 방법?
Middleware는 필터와 유사한 것이며 클라이언트와 응용 프로그램 간의 요청 및 응답을 처리하는 방법입니다.
HTTP 처리 프로세스가 하수 처리와 비교되면 미들웨어는 필터 레이어와 같습니다. 각 미들웨어는 HTTP 처리 중에 요청 또는 (및) 응답 데이터를 다시 작성합니다.
상태, 특정 기능을 구현합니다.
"Connect"란 무엇입니까?
우리는 Connect를 많은 미들웨어 모음으로 생각할 수 있습니다. 각 요청에 대해 Connect는 미들웨어 계층을 사용하여 요청을 필터링하며 각각 HTTP 요청을받을 수 있습니다.
TJ Holowaychuk는 Connect에 대해 두 가지 유형의 미들웨어가 있다고 말했다. 그중 하나는 필터입니다.
필터는 요청을 처리하지만 요청에 응답하지 않습니다 (서버 로그 생각).
두 번째 유형은 제공자이며 요청에 응답합니다. 필요에 따라 여러 미들웨어를 사용할 수 있습니다. HTTP 요청은 미들웨어 중 하나까지 각 미들웨어를 통해 요청에 응답합니다.
2. Connect의 내장 미들웨어 소개
다음은 몇 가지 주요 미들웨어이며 예제가 설명되어 있습니다.
(1), cookieParser---------------------------------------------------------------------------------------------------------------------- Cookies can also be encrypted via req.secret.
코드 사본은 다음과 같습니다.
var connect = require ( './ lib/connect');
var app = connect ()
.use (connect.cookieparser ( 'Secret String'))
.use (function (req, res, next) {
req.cookies.website = "안녕하세요, 나는 큰 비유입니다!" ;
res.end (json.stringify (req.cookies));
}). 듣기 (8888);
(2), 세션
설명 : 세션 관리 미들웨어
종속성 : Cookieparser
매개 변수 : 옵션
옵션 :
키 : 쿠키 이름, 기본값은 connect.sid입니다
상점 : 세션 스토리지 인스턴스
비밀 : 세션 쿠키 암호화
쿠키 : 세션의 쿠키 구성, 기본값은 {path : '/', httponly : true, maxage : null}입니다.
프록시 : X-Forwarded-Proto를 통해 구현 된 보안 쿠키를위한 리버스 프록시
쿠키 옵션 :
쿠키.
코드 사본은 다음과 같습니다.
var connect = require ( './ lib/connect');
var app = connect ()
.use (connect.logger ( 'dev'))
.use (connect.cookieparser ())
. 사용
.use (function (req, res, next) {
if (req.session.pv) {
res.setheader ( 'content-type', 'text/html');
res.write ( 'views :' + req.session.pv);
res.end ();
req.session.pv ++;
}또 다른{
req.session.pv = 1;
res.end ( '새로 고침');
}
})
.Listen (8888);
클라이언트가 계속해서 페이지 "PV"를 새로 고치면 서버 측 "세션"의 유지 보수 수가 계속 증가합니다.
(3), bodyParser-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
코드 사본은 다음과 같습니다.
var connect = require ( 'connect');
var app = connect ()
.use (connect.bodyparser ())
.use (function (req, res) {
res.end ( 'req.body =>' + json.stringify (req.body));
})
.Listen (8888);
셋째, 비교 예를 들어 미들웨어 사용의 이점을 확인해 봅시다.
코드 사본은 다음과 같습니다.
/*
* Connect를 사용하여 구현 된 정적 파일 처리
*/
var connect = require ( 'connect');
연결 (connect.static (__ dirname + '/public ').listen(//listen
8888,
기능() {
Console.log ( 'Connect는 포트 8888에서 시작);
}
);
/*
* 노드 네이티브 API를 사용한 구현
*/
var http = 요구 ( 'http');
http.createserver (
함수 (req, res) {
var url = 요구 사항 ( 'url');
var fs = 요구 ( 'fs');
var pathname = __dirname + '/public' + url.parse (req.url) .pathname;
// 로컬 파일을 읽습니다
fs.ReadFile (
PathName,
함수 (err, data) {
// 예외 처리
if (err) {
res.writehead (500);
res.end ( '500');
}
또 다른 {
res.end (데이터);
}
}
);
}
) .Listen (// 듣기
8888,
기능() {
Console.log ( 'HTTP 서버는 포트 8888'에서 시작);
}
);
노드 네이티브 API는 이미 많은 줄의 코드를 소비했지만 여전히 처리되지 않은 간단한 정적 파일 서버의 많은 측면을 남깁니다.
예를 들어, 404 및 기타 예외는 처리되지 않으며 기본 파일 경로 보안 확인 (실제로 전체 OS 파일 시스템에 액세스 할 수 있음), 글로벌 예외 처리 등이 없습니다.
동시에 Connect는 이미 이러한 모든 문제를 처리했습니다.
4, 요약합시다
(1) 미들웨어 스트리밍 처리를 이해합니다.
코드 사본은 다음과 같습니다.
var app = connect ();
app.use (connect.staticCache ());
app.use (connect.static (__ dirname + '/public'));
app.use (connect.cookieparser ());
app.use (connect.session ());
app.use (connect.query ());
app.use (connect.bodyparser ());
app.use (connect.csrf ());
app.use (function (req, res, next) {
// 미들웨어
});
App.Listen (8888);
(2) 기본 구현 방법과 미들웨어 구현의 차별화.
(3) 미들웨어의 위의 예를 통해 사용 및 사용 시나리오를 이해하고 다른 미들웨어의 기본 사용을 마스터하기 위해 관련 문서를 참조 할 수 있습니다.