티스토리 뷰
스캐폴딩(건물을 처음 시공할 때 그 주위에 강관과 발판을 연결해 작업자들이 이동할 수 있는 엉성한 구조물) - express에서는 프로젝트를 시작할 때 스캐폴딩을 생성하는 유틸리티를 제공한다. 쉽게 템플릿이라고 생각하면 된다.
npm은 프로젝트 의존성과 메타데이터를 package.json 파일에 보관해서 관리한다.
npm init - 명령어 사용
express를 쓰지 않았을 때와 썼을 때의 차이(현재까지)
path를 정규화하여 직접 쿼리스트링과 마지막 슬래쉬를 없애고 많은 곳에 신경을 써야 했다면
express를 통해서 편리하게 서버동작을 수행시킬 수 있다.
뷰와 레이아웃
뷰 - 사용자에게 전송되는 것(HTML, PNG 등)
express는 여러 가지 뷰 엔진을 지원하며 이들이 제공하는 추상화를 할 수 있다.(ex) Jade)
var express = require('express');
var app = express();
/*라우팅이란 요청받은 콘텐츠를 클라이언트에 보내는 메커니즘이다
웹 기반 클라이언트/서버 애플리케이션에서는 클라이언트가 원하는 콘텐츠를
URL에 표시, 즉 경로와 쿼리스트링에 표시한다.*/
// 핸들바 뷰 엔진 설정 - 템플렛 프레임워크
/*이렇게 하면 뷰 엔진이 만들어지고, 익스프레스는 기본적으로 이 엔진을 사용한다.
*/
var handlebars =
require('express-handlebars').create({defaultLayout:'main'});
/*핸들바 인스턴스를 만들면서 defaultLayout:'main'으로 기본 레이아웃을 지정했다.
따로 명시하지 않는다면 모든 뷰에서 이 레이아웃을 쓰겠다는 말이다.*/
app.engine('handlebars', handlebars.engine);
app.set('view engine','handlebars');
app.set('port', process.env.PORT || 3000);
/* app.get 메서드는 라우트를 추가하는 메서드이다.
매개변수로 경로와 함수를 받는다
이때 경로 매개변수는 라우트를 정의하며 함수 매개변수는 라우트가 일치할 때 호출되는 함수이다.
*/
app.get('/', function(req, res){
res.render('home');
})
app.get('/about', function(req, res){
res.render('about');
})
/*app.use는 익스프레스에서 미들웨어를 추가할 때 사용되는 메서드로
라우트와 일치하지 않는 모든 것들을 처리하는 폴백(catch-all) 핸들러라고 생각하면 된다.
*/
/*static 미들웨어는 클라이언트에 전송할 각 정적 파일마다 라우트를 만들고
그 파일을 반환하는 것과 같은 효과가 있다.*/
//static 미들웨어
app.use(express.static(__dirname + '/public'));
//커스텀 404페이지 (미들웨어)
app.use(function (req, res){
res.status(404);
res.render('404');
});
//커스텀 500 페이지 (미들웨어)
app.use(function(err, req, res, next){
console.error(err, stack);
res.status(500);
res.render('500');
})
app.listen(app.get('port'),function(){
console.log('Express started on http://localhost:' + app.get('port')
+ '; press Ctrl-C to terminate');
});
정적 파일과 뷰
익스프레스는 미들웨어를 통해 정적 파일과 뷰를 처리한다. 미들웨어에서는 정규화를 해주므로 요청 처리를 더 쉽게 할 수 있는데,
static 미들웨어는 정적 자원을 담고 있는 하나 이상의 디렉터리를 지목해서 특별한 처리 없이 클라이언트에 전송할 수 있게 해준다. 이 디렉터리에 이미지, CSS파일 클라이언트 자바 스크립트 파일 등을 저장한다.
'node.js' 카테고리의 다른 글
(express) 8. 폼 처리 (0) | 2016.01.18 |
---|---|
7. HTTP 서비스를 Node.js로 구현 (0) | 2016.01.12 |
6. Node.js에서 파일시스템 접근 (0) | 2016.01.04 |
5. Node.js의 데이터 입출력 처리 (0) | 2015.12.29 |
웹 지식 (0) | 2015.12.29 |