노드 (다운로드)를 설치 한 후 컴퓨터에서 디렉토리를 만들고 첫 번째 애플리케이션을 시작하십시오.
$ mkdir Hello-World
이 디렉토리에서는 다른 노드 패키지와 다르지 않은 응용 프로그램 "패키지"를 정의합니다. 파일 디렉토리의 JSON 파일은 종속성을 명확하게 정의합니다. NPM 명령을 사용하여 알 수없는 놀라움을 방지하기 위해 "3.x"이외의 버전을 설치하는 대신 최신 버전의 Express를 얻을 수 있습니다.
{ "name": "hello-world", "description": "Hello World Test 앱", "버전": "0.0.1", "private": "true,"종속성 ": {"Express ":"3.x "}}이제 패키지가 있습니다. 이 디렉토리에서는 NPM (1)을 사용 하여이 종속성을 설치할 수 있습니다.이 경우 입력하면됩니다.
$ npm 설치
NPM이 완료되면 /node_modules 디렉토리에 의존하는 Express 3.X가 있습니다. Express Tree 및 다음 코드 스 니펫에 표시된 고유 한 종속성과 마찬가지로 NPM LS로이를 확인할 수 있습니다.
$ npm [email protected] /private /tmp└ ─ ┬ [email protected] ├ ├ ├ ├ ├ ├ 경우 ─ [email protected] conn Cookie@0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.3.3.3.3.3.3.3.3.3.3.3 ├ ├ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 인지도. [email protected] └ └ 익. [email protected]
이제 응용 프로그램 자체를 만듭니다! App.js 또는 Server.js라는 파일을 작성하더라도 어떤 파일을 좋아하든 Express를 소개 한 다음 Express ()를 사용하여 새 응용 프로그램을 만듭니다.
var express = require ( 'express'); var app = express ();
새 응용 프로그램 인스턴스는 app.verb ()를 통해 경로 정의를 시작할 수 있습니다.이 경우 "Hello World"문자열을 통해 "get/"요청에 응답합니다. REQ 및 RES는 귀하에게 제공되는 정확히 동일한 노드 객체이므로 Res.pipe (), Req.on ( 'Data', Callback) 및 Express와 아무 관련이없는 다른 일을 호출 할 수 있습니다.
Express는 이러한 객체를 향상시켜 컨텐츠 길이를 추가 할뿐만 아니라 Res.Send ()와 같은 상위 레벨 인터페이스를 제공합니다.
app.get ( '/hello.txt', function (req, res) {res.send ( 'hello world');});이제 연결 및 청취 연결을 위해 app.listen () 메소드를 호출하여 노드의 net.server #listen ()과 동일한 매개 변수를 수락합니다.
var server = app.listen (3000, function () {console.log ( 'port %d', server.address (). port);});Express (1)를 사용하여 응용 프로그램을 생성하십시오
Express 팀은 Express-Generator (1)라는 편리한 프로젝트 생성기를 유지합니다. NPM을 사용하여 전 세계적으로 Express-Generator를 설치하는 경우 컴퓨터의 어느 곳에서나 액세스 할 수 있습니다.
$ NPM 설치 -G Express -Generator
이 도구는 애플리케이션 프레임 워크를 쉽게 얻을 수있는 방법을 제공하지만 예를 들어, 제한된 범위를 갖춘 템플릿 엔진 만 지원하며 실제로 노드 용 웹 사이트 프레임 워크 템플릿 구축을 지원합니다. 도움말을 통해 볼 수 있습니다.
사용법 : Express [옵션] 옵션 : -h, -help 출력 사용법 정보 -V, -Version 출력 버전 번호 -e, -ejs ejs 엔진 지원 (기본값) -Hogan 추가 hogan.js 엔진 지원 -c, -css 스타일 지원 (stylus | stylus compass) -F, -forector fore onneempty force) --cs는 -cs add
어쨌든 지원되는 응용 프로그램을 생성하려면 간단히 실행하면 ::
$ Express -CSS Stylus MyAppCreate : MyAppCreate : MyApp/package.jsoncreate : myApp/app.jscreate : myApp/publiccreate : myApp/public/javaScriptscreate : myApp/public/stylesheetscreate : myApp/public/stylesheet/style. MyApp/loutes/index.jscreate : myapp/views/index.jadecreate : myApp/views/layout.jadeInstall 종속성 : $ cd myapp && npm installrun 앱 : $ debug = myapp node 앱
다른 노드 응용 프로그램과 마찬가지로 다음 종속성을 설치해야합니다.
그런 다음 시작합시다.
$ npm 시작
이것은 간단한 응용 프로그램을 시작하고 실행하는 데 필요한 전부입니다. Express는 특정 디렉토리 구조에 구속되지 않았으며 이는 단지 귀하를위한 안내서 일뿐입니다. 응용 프로그램 구조의 선택은 Github 저장소에서 볼 수 있습니다.
오류 처리
오류 처리 미들웨어 정의는 일반 미들웨어와 같지만 4 개의 매개 변수를 정의해야합니다. 이는 기능 서명 (err, req, res, next)입니다.
app.use (function (err, req, res, next) {console.error (err.stack); res.send (500, 'something broke!');});강제 오류 처리 미들웨어는 일반적으로 다른 app.use ()를 따라 정의되지 않지만 호출은 다음과 같습니다.
var bodyparser = require ( 'body-parser'); var methodoverride = require ( 'method-override'); app.use (bodyparser ()); app.use (methodoverride ()); app.router); app.use (function (err, req, res, next) {// logic});이 미들웨어의 응답은 완전히 임의적입니다. HTML 오류 페이지, 간단한 메시지, JSON 문자열 또는 다른 응답에 응답 할 수 있습니다.
체계적이고 고급 프레임 워크를 구축하려면 정상 미들웨어를 정의하는 것처럼 이러한 오류 처리 미들웨어 중 일부를 정의 할 수 있습니다. 예를 들어, XHR 요청에 대한 오류 핸들러를 정의하려고한다고 가정 해 봅시다.이 외에도 다음과 같습니다.
var bodyparser = require ( 'body-parser'); var methodoverride = require ( 'method-override'); app.use (bodyparser ()); app.use (methodoverride ()); app.use (app.router); app.use (logerrors); app.use (clienterRorhandler); app.use (ErrorHandler);
보다 일반적인 로그러기에서는 STDERR, LOGGLY 또는 유사한 서비스에 요청 및 오류 메시지를 작성할 수 있습니다.
함수 로러 (err, req, res, next) {console.error (err.stack); 다음 (err);}ClientErrorHandler의 정의는 다음과 같습니다.이 오류는 다음 오류로 명시 적으로 전달됩니다.
function clientErrorHandler (err, req, res, next) {if (req.xhr) {res.send (500, {error : 'something bew up!'}); } else {다음 (err); }}다음 오류 핸들러 "만능"구현은 다음과 같이 정의 할 수 있습니다.
함수 ErrorHandler (err, req, res, next) {res.status (500); res.render ( 'error', {error : err});}온라인으로 사용자 계산
이 섹션에서는 (작은) 응용 프로그램을 자세히 설명하고 Redis를 사용하여 온라인 사용자 수를 추적합니다. 먼저 패키지를 만듭니다. JSON 파일에는 두 개의 첨부 파일이 포함되어 있습니다. 하나는 Redis 클라이언트 용이고 다른 하나는 Express 자체를위한 것입니다. 또한 Redis를 감싸고 $ redis-server를 통과했는지 확인하십시오.
{ "name": "app", "버전": "0.0.1", "종속성": { "Express": "3.x", "redis": "*"}}다음으로 응용 프로그램과 Redis에 대한 연결을 만들어야합니다.
var express = require ( 'express'); var redis = require ( 'redis'); var db = redis.createclient (); var app = express ();
다음 미들웨어는 온라인 사용자를 추적합니다. 여기서 우리는 정렬 된 세트를 사용하여 R redis의 온라인 사용자를 쿼리 할 수 있습니다. 우리는 타임 스탬프를 회원의 "온라인 표준"으로 사용합니다. 여기서는 일반적인 사용자 ID 대신 사용자 에이전트 문자열을 사용합니다.
app.use (function (req, res, next) {var ua = req.headers [ 'user-agent']; db.zadd ( 'online', date.now (), ua, next);});다음 미들웨어는 마지막 순간에 ZrevRangeByscore를 사용하여 최대 온라인 사용자 수를 얻는 것입니다. 우리는 항상 최신 온라인 사용자를 얻고 그의 상한은 현재 타임 스탬프 마이너스 60000 밀리 초입니다.
app.use (function (req, res, next) {var min = 60 * 1000; var econ = date.now () -min; db.zrevrangebyscore ( 'online', '+inf', wor, function (err, users) {if (err) return (err); req.online = user (next ();});마지막으로 URL을 통해 사용하여 포트에 바인딩합니다! 그게 전부입니다. 새로운 브라우저 에서이 앱에 액세스하면 온라인으로 많은 사람들이 증가 할 것입니다.
app.get ( '/', function (req, res) {res.send (req.online.length + 'Online');}); app.listen (3000);Express의 리버스 프록시
바니시 또는 nginx와 같은 역전 프록시 뒤에 익스프레스를 사용하는 것은 사소하지만 구성이 필요합니다. "Trust Proxy"설정 app.enable ( "Trust Proxy")을 활성화함으로써 Express는 리버스 프록시에 대한 몇 가지 요령이 있습니다.
이 설정을 활성화하면 미묘한 효과가 있습니다. 첫 번째는 X-Forwarded-Proto가 Reverse Proxy에 의해 설정 될 수 있으며 앱에 HTTPS 또는 간단한 HTTP라고 말합니다. 이 값은 Req.Protocol에 의해 반영됩니다.
두 번째 변경 사항은 req.ip 및 req.ips 값이 x-forwarded 주소 목록을 작성한다는 것입니다.
디버그 익스프레스
Express는 내부적으로 디버그 모듈을 사용하여 경로 일치 및 응용 프로그램 패턴에 대한 정보를 기록합니다. 이 메시지를 보려면 디버그 환경 변수를 다음과 같이 표현하도록 설정하고 응용 프로그램을 시작한 후 콘솔에 디버그 정보가 표시됩니다.
$ debug = Express :* node ./bin/www
이 Hello World 예제를 실행하면 다음이 인쇄됩니다.
Express : 개발 모드에서의 응용 프로그램 부팅 +0Msexpress : 라우터 정의 get /hello.txt +0msexpress : 라우터 정의 get /hello.txt +1ms
또한 Executable (Generator)을 표현하여 생성 된 프로그램은 디버그 모듈을 사용하며 기본 범위는 My-Application Debug 네임 스페이스입니다.
다음 명령으로 이러한 디버깅 문을 활성화 할 수 있습니다.
$ debug = my-application 노드 ./bin/www
디버깅에 대한 자세한 내용은 디버깅 안내서를 참조하십시오