// public 폴더를 static으로 오픈
app.use('/public', static(path.join(__dirname, 'public')));

 

서버 파일 경로(__dirname)에 public 폴더를 붙혀  

 

localhost:3000/public/*.html에 접근

-모듈만들기-

user1.js

//exports 객체 속성으로 함수 추가
exports.getUser = function(){
    return {id:'test01',name:'소녀시대'};
}

//exports 객체 속성으로 객체 추가
exports.group={id:'group',name:'친구'};

 

module_test1.js

//require() 메소드는 exports 객체를 반환함
var user1 = require('./user1');

function showUser(){
    return user1.getUser().name + ', '+user1.group.name;
}

console.log('사용자 정보:%s',showUser);

 

-출력결과-

 

-module.exports를 사용해서 객체를 그대로 할당하기-

노드는 모듈을 처리할 때 exports를 속성으로 인식 , 그래서 exports에 객체를 할당하면 require한 부분에서 사용 할 수 없음 => 이 부분을 해결하기 위하여 exports 가 아닌 module.exports 를 사용

 

user3.js

//module.exports에는 객체를 그대로 할당할 수 있음
var user = {
    getUser : function(){
        return {id:'test01',name:'소녀시대'};
    },
    group:{id:'group01',name:'친구'}
}

module.exports = user;

 

module_test3.js

//require() 메소드는 객체를 반환함.
var user = require('./user3');

function showUser(){
    return user.getUser().name + ', '+user.group.name;
}

console.log('사용자 정보 : %s',showUser());

 

-출력결과-

 

-exports와 module.exports를 함께 사용하기-

 

두 개를 동시에 사용하면 module.exports가 우선으로 적용된다. 따라서 module.exports 사용을 권장한다.

◎멀티파트포맷 : 음악이나 이미지 파일 등을 일반 데이터와 함께 웹 서버로 보내려고 만든 표준

 

-multer 미들웨어 설치-

% npm install multer --save

 

속성/메소드 이름 설명
destination 업로드한 파일이 저장될 폴더를 지정합니다.
filename 업로드한 파일의 이름을 바꿉니다.
limits 파일 크기나 파일 개수 등의 제한 속성을 설정하는 객체입니다.

app13.js

/**
 * 파일 업로드하기
 * 
 * 웹브라우저에서 아래 주소의 페이지를 열고 웹페이지에서 요청
 *    http://localhost:3000/public/photo.html
 *
 * 파일업로드를 위해 클라이언트에서 지정한 이름은 photo 입니다.
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , cookieParser = require('cookie-parser')
  , static = require('serve-static')
  , errorHandler = require('errorhandler');

// 에러 핸들러 모듈 사용
var expressErrorHandler = require('express-error-handler');

// Session 미들웨어 불러오기
var expressSession = require('express-session');

// 파일 업로드용 미들웨어
var multer = require('multer');
var fs = require('fs');

//클라이언트에서 ajax로 요청 시 CORS(다중 서버 접속) 지원
var cors = require('cors');


// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

// public 폴더와 uploads 폴더 오픈
app.use('/public', static(path.join(__dirname, 'public')));
app.use('/uploads', static(path.join(__dirname, 'uploads')));

// cookie-parser 설정
app.use(cookieParser());

// 세션 설정
app.use(expressSession({
	secret:'my key',
	resave:true,
	saveUninitialized:true
}));


//클라이언트에서 ajax로 요청 시 CORS(다중 서버 접속) 지원
app.use(cors());


//multer 미들웨어 사용 : 미들웨어 사용 순서 중요  body-parser -> multer -> router
// 파일 제한 : 10개, 1G
var storage = multer.diskStorage({
    destination: function (req, file, callback) {
        callback(null, 'uploads')
    },
    filename: function (req, file, callback) {
        callback(null, file.originalname + Date.now())
    }
});

var upload = multer({ 
    storage: storage,
    limits: {
		files: 10,
		fileSize: 1024 * 1024 * 1024
	}
});


// 라우터 사용하여 라우팅 함수 등록
var router = express.Router();

// 파일 업로드 라우팅 함수 - 로그인 후 세션 저장함
router.route('/process/photo').post(upload.array('photo', 1), function(req, res) {
	console.log('/process/photo 호출됨.');
	
	try {
		var files = req.files;
	
        console.dir('#===== 업로드된 첫번째 파일 정보 =====#')
        console.dir(req.files[0]);
        console.dir('#=====#')
        
		// 현재의 파일 정보를 저장할 변수 선언
		var originalname = '',
			filename = '',
			mimetype = '',
			size = 0;
		
		if (Array.isArray(files)) {   // 배열에 들어가 있는 경우 (설정에서 1개의 파일도 배열에 넣게 했음)
	        console.log("배열에 들어있는 파일 갯수 : %d", files.length);
	        
	        for (var index = 0; index < files.length; index++) {
	        	originalname = files[index].originalname;
	        	filename = files[index].filename;
	        	mimetype = files[index].mimetype;
	        	size = files[index].size;
	        }
	        
	    } else {   // 배열에 들어가 있지 않은 경우 (현재 설정에서는 해당 없음)
	        console.log("파일 갯수 : 1 ");
	        
	    	originalname = files[index].originalname;
	    	filename = files[index].name;
	    	mimetype = files[index].mimetype;
	    	size = files[index].size;
	    }
		
		console.log('현재 파일 정보 : ' + originalname + ', ' + filename + ', '
				+ mimetype + ', ' + size);
		
		// 클라이언트에 응답 전송
		res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
		res.write('<h3>파일 업로드 성공</h3>');
		res.write('<hr/>');
		res.write('<p>원본 파일명 : ' + originalname + ' -> 저장 파일명 : ' + filename + '</p>');
		res.write('<p>MIME TYPE : ' + mimetype + '</p>');
		res.write('<p>파일 크기 : ' + size + '</p>');
		res.end();
		
	} catch(err) {
		console.dir(err.stack);
	}	
		
});
 
app.use('/', router);


// 404 에러 페이지 처리
var errorHandler = expressErrorHandler({
    static: {
      '404': './public/404.html'
    }
});

app.use( expressErrorHandler.httpError(404) );
app.use( errorHandler );


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});


 

photo.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>파일업로드 테스트</title>
	</head>
<body>
	<h1>파일업로드</h1>
	<br>
	<form method="post" enctype="multipart/form-data" action="/process/photo">
		<table>
			<tr>
				<td><label>파일</label></td>
				<td><input type="file" name="photo" /></td>
			</tr>
		</table>
		<input type="submit" value="업로드" name="submit"/>
	</form>
</body>
</html>

◎쿠키 : 클라이언트 웹 브라우저에 저장되는 정보

◎세션 : 웹 서버에 저장되는 정보

 

-쿠키 처리하기-

/**
 * cookie parser 미들웨어 사용하기
 * 
 * 웹브라우저에서 아래 주소로 요청
 *    http://localhost:3000/process/showCookie
 *    http://localhost:3000/process/setUserCookie
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , cookieParser = require('cookie-parser')
  , static = require('serve-static')
  , errorHandler = require('errorhandler');

// 에러 핸들러 모듈 사용
var expressErrorHandler = require('express-error-handler');


// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use('/public', static(path.join(__dirname, 'public')));

// cookie-parser 설정
app.use(cookieParser());


// 라우터 사용하여 라우팅 함수 등록
var router = express.Router();

router.route('/process/showCookie').get(function(req, res) {
	console.log('/process/showCookie 호출됨.');

	res.send(req.cookies);
});

router.route('/process/setUserCookie').get(function(req, res) {
	console.log('/process/setUserCookie 호출됨.');

	// 쿠키 설정
	res.cookie('user', {
		id: 'mike',
		name: '소녀시대',
		authorized: true
	});
	
	// redirect로 응답
	res.redirect('/process/showCookie');
});

app.use('/', router);


// 404 에러 페이지 처리
var errorHandler = expressErrorHandler({
    static: {
      '404': './public/404.html'
    }
});

app.use( expressErrorHandler.httpError(404) );
app.use( errorHandler );


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

-세션 처리하기-

/**
 * session 사용하기
 * 
 * 웹브라우저에서 아래 주소의 페이지를 열고 웹페이지에서 요청
 *    http://localhost:3000/public/login2.html
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , cookieParser = require('cookie-parser')
  , static = require('serve-static')
  , errorHandler = require('errorhandler');

// 에러 핸들러 모듈 사용
var expressErrorHandler = require('express-error-handler');

// Session 미들웨어 불러오기
var expressSession = require('express-session');


// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use('/public', static(path.join(__dirname, 'public')));

// cookie-parser 설정
app.use(cookieParser());

// 세션 설정
app.use(expressSession({
	secret:'my key',
	resave:true,
	saveUninitialized:true
}));


// 라우터 사용하여 라우팅 함수 등록
var router = express.Router();

// 로그인 라우팅 함수 - 로그인 후 세션 저장함
router.route('/process/login').post(function(req, res) {
	console.log('/process/login 호출됨.');

	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	if (req.session.user) {
		// 이미 로그인된 상태
		console.log('이미 로그인되어 상품 페이지로 이동합니다.');
		
		res.redirect('/public/product.html');
	} else {
		// 세션 저장
		req.session.user = {
			id: paramId,
			name: '소녀시대',
			authorized: true
		};
		
		res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
		res.write('<h1>로그인 성공</h1>');
		res.write('<div><p>Param id : ' + paramId + '</p></div>');
		res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
		res.write("<br><br><a href='/process/product'>상품 페이지로 이동하기</a>");
		res.end();
	}
});

// 로그아웃 라우팅 함수 - 로그아웃 후 세션 삭제함
router.route('/process/logout').get(function(req, res) {
	console.log('/process/logout 호출됨.');
	
	if (req.session.user) {
		// 로그인된 상태
		console.log('로그아웃합니다.');
		
		req.session.destroy(function(err) {
			if (err) {throw err;}
			
			console.log('세션을 삭제하고 로그아웃되었습니다.');
			res.redirect('/public/login2.html');
		});
	} else {
		// 로그인 안된 상태
		console.log('아직 로그인되어있지 않습니다.');
		
		res.redirect('/public/login2.html');
	}
});

// 상품정보 라우팅 함수
router.route('/process/product').get(function(req, res) {
	console.log('/process/product 호출됨.');
	
	if (req.session.user) {
		res.redirect('/public/product.html');
	} else {
		res.redirect('/public/login2.html');
	}
});

app.use('/', router);


// 404 에러 페이지 처리
var errorHandler = expressErrorHandler({
    static: {
      '404': './public/404.html'
    }
});

app.use( expressErrorHandler.httpError(404) );
app.use( errorHandler );


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

'For developer > Node.js' 카테고리의 다른 글

(Node.js)모듈화  (0) 2020.09.09
(Node.js)파일 업로드 기능  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(2)  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(1)  (0) 2020.09.07
(Node.js)서버관련  (0) 2020.09.07

-static 미들웨어-

npm install serve-static --save 설치

 

 

샘플1.

var static = require('serve-static')
app.use('/public',static(path.join(__dirname,'public')));

 위 코드처럼 설정을 하면 폴더1/public/index.html 에서 index.html에 접근하려면 바로 http://localhost:3000/index.html로 바로 접근 가능하다.

 

-body-parser 미들웨어-

app7.js

/**
 * POST 방식으로 전달된 파라미터 확인하기
 *
 * (1) 웹 브라우저에서 http://localhost:3000/public/login.html 페이지 열고 요청
 * (2) 크롬 브라우저의 Postman 앱이나 기타 POST 요청 도구를 사용하여 POST 방식으로 요청
 *     GET 방식으로 요청 시에는 웹브라우저에서 아래 URL로 요청해야 함
 *         http://localhost:3000?id=test1&password=123456
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use(static(path.join(__dirname, 'public')));

// 미들웨어에서 파라미터 확인
app.use(function(req, res, next) {
	console.log('첫번째 미들웨어에서 요청을 처리함.');

	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
	res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
	res.write('<div><p>Param id : ' + paramId + '</p></div>');
	res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
	res.end();
});


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

login.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 테스트</title>
    </head>
    <body>
        <h1>로그인</h1>
        <br>
        <form method='post'>
            <table>
                <tr>
                    <td><label>아이디</label></td>
                    <td><input type='text' name="id"></td>
                </tr>
                <tr>
                    <td><label>비밀번호</label></td>
                    <td><input type="password" name="password"></td>
                </tr>
            </table>
            <input type="submit" value="전송" name=''>
        </form>
    </body>
</html>

 

-라우터 미들웨어-

사용자가 요청한 기능이 무엇인지 패스를 기준으로 구별함.

 

example

//라우터 객체 참조
var router = express.Router();

//라우팅 함수 등록
router.route('/process/login').get(...);
router.route('/process/login').post(...);
...

//라우터 객체를 app 객체에 등록
app.use('/',router);

router.route(요청패스).get(실행될 함수);
router.rout(요청패스).post(실행될 함수);
메소드 이름 설명
 get(callback) get 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
post(callback) post 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
put(callback) put 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
delete(callback) delete 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
all(callback) 모든 요청 방식을 처리하며 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.

app8.js

/**
 * Router 객체를 이용해 라우팅 함수 등록하기
 *
 * (1) 웹 브라우저에서 http://localhost:3000/public/login2.html 페이지 열고 요청
 * (2) 크롬 브라우저의 Postman 앱이나 기타 POST 요청 도구를 사용하여 POST 방식으로 요청
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use('/public', static(path.join(__dirname, 'public')));


// 라우터 객체 참조
var router = express.Router();

// 라우팅 함수 등록
router.route('/process/login').post(function(req, res) {
	console.log('/process/login 처리함.');

	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
	res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
	res.write('<div><p>Param id : ' + paramId + '</p></div>');
	res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
	res.write("<br><br><a href='/public/login2.html'>로그인 페이지로 돌아가기</a>");
	res.end();
});

// 라우터 객체를 app 객체에 등록
app.use('/', router);


// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
	res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

login2.html(Action 속성 추가)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 테스트</title>
    </head>
    <body>
        <h1>로그인</h1>
        <br>
        <form method='post' action="/process/login">
            <table>
                <tr>
                    <td><label>아이디</label></td>
                    <td><input type='text' name="id"></td>
                </tr>
                <tr>
                    <td><label>비밀번호</label></td>
                    <td><input type="password" name="password"></td>
                </tr>
            </table>
            <input type="submit" value="전송" name=''>
        </form>
    </body>
</html>

 

-URL 파라미터 사용하기-

 

app8_02.js(router.route 경로에 /:name 추가)

req.params.name;-> param에서 이름을 가져옴

/**
 * Router 객체를 이용해 라우팅 함수 등록하기
 * POST로 요청할 때 URL 파라미터를 params 객체로 확인
 *
 * (1) 웹 브라우저에서 http://localhost:3000/public/login3.html 페이지 열고 요청
 * (2) 크롬 브라우저의 Postman 앱이나 기타 POST 요청 도구를 사용하여 POST 방식으로 요청
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use('/public', static(path.join(__dirname, 'public')));


// 라우터 사용하여 라우팅 함수 등록
var router = express.Router();

router.route('/process/login/:name').post(function(req, res) {
	console.log('/process/login/:name 처리함.');

    var paramName = req.params.name;
    
	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
	res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
    res.write('<div><p>Param name : ' + paramName + '</p></div>');
	res.write('<div><p>Param id : ' + paramId + '</p></div>');
	res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
	res.write("<br><br><a href='/public/login3.html'>로그인 페이지로 돌아가기</a>");
	res.end();
});

app.use('/', router);


// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
	res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

login3.html(액션에 경로추가)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 테스트</title>
    </head>
    <body>
        <h1>로그인</h1>
        <br>
        <form method='post' action="/process/login/mike">
            <table>
                <tr>
                    <td><label>아이디</label></td>
                    <td><input type='text' name="id"></td>
                </tr>
                <tr>
                    <td><label>비밀번호</label></td>
                    <td><input type="password" name="password"></td>
                </tr>
            </table>
            <input type="submit" value="전송" name=''>
        </form>
    </body>
</html>

/prcoess/login/mike  <-> /process/login/:name 서로 매핑해준다.

'For developer > Node.js' 카테고리의 다른 글

(Node.js)파일 업로드 기능  (0) 2020.09.08
(Node.js)쿠키와 세션  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(1)  (0) 2020.09.07
(Node.js)서버관련  (0) 2020.09.07
(Node.js)파일처리 관련(1)  (0) 2020.09.06

Express Module을 사용하는 이유? http만 모듈을 사용해서는 시간과 노력이 많이 드는 문제가 생김.

 

-익스프레스 서버 객체가 가지고 있는 메소드-

메소드 이름 설명
set(name,value) 서버 설정을 위한 속성을 지정합니다. set() 메소드로 지정한 속성은 get()메소드로 꺼내어 확인할 수 있습니다.
get(name) 서버 설정을 위해 지정한 속성을 꺼내 옵니다.
use([path,]function[,function...]) 미들웨어 함수를 사용합니다.
get([path,] function) 특정 패스로 요청된 정보를 처리합니다.

-메소드 set 의 속성 -

속성이름 설명
env 서버 모드를 설정합니다.
views 뷰들이 들어 있는 폴더 또는 폴더 배열을 설정합니다.
view engine 디폴트로 사용할 뷰 엔진을 설정합니다.
//Express 기본 모듈 불러오기
var express = require('express'),http = require('http');

//익스프레스 객체 생성
var app = express();

//기본 포트를 app 객체에 속성으로 설정
app.set('port',process.env.PORT || 3002);

//Express 서버 시작
http.createServer(app).listen(app.get('port'),function(){
    console.log('익스프레스 서버를 시작했습니다 : '+app.get('port'));
});

 

-미들웨어로 클라이언트에 응답 보내기-

 

 

var express = require('express');
var http = require('http');

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
    res.writeHead('200',{'content-Type':'text/html;charset=utf8'});
    res.end('<h1>Express 서버에서 응답한 결과입니다.</h1>');
});

http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

-출력-

 

-여러 개의 미들웨어를 등록하여 사용하는 방법-

var express = require('express');
var http = require('http');

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
    req.user = 'mike';
    next();
});

app.use('/',function(req,res,next){
    console.log('두 번째 미들웨어에서 요청을 처리함.') ;
    
   res.writeHead('200',{'content-Type':'text/html;charset=utf8'});
    res.end('<h1>Express 서버에서 '+req.user+' 응답한 결과입니다.</h1>');
    });

http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

use 메소드를 이용해 미들웨어를 만들어 준다음 다음 미들웨어로 넘길 때는 next()함수를 사용하여 넘김.

 

-익스프레스의 요청 객체와 응답 객체 알아보기-

var express = require('express');
var http = require('http');

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
   res.send({name:"소녀시대",age:20});
  /*  next();*/
});

app.use('/',function(req,res,next){
    console.log('두 번째 미들웨어에서 요청을 처리함.') ;
    
   res.writeHead('200',{'content-Type':'text/html;charset=utf8'});
    res.end('<h1>Express 서버에서 '+req.user+' 응답한 결과입니다.</h1>');
    });

http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

-출력결과-

메소드 이름 설명
send([body]) 클라이언트에 응답 데이터를 보냅니다.전달할 수 있는 데이터는 HTML 문자열,Buffer 객체,JSON 객체,JSON 배열입니다.
status(code) HTTP 상태 코드를 반환합니다. 상태 코드는 end()나 send() 같은 전송 메소드를 추가로 호출해야 전송할 수 있습니다.
sendStatus(statusCode) HTTP 상태 코드를 반환합니다. 상태 코드는 상태 메시지와 함께 전송됩니다.
redirect([status,]path) 웹 페이지 경로를 강제로 이동시킵니다.
render(view [, locals][,callback]) 뷰 엔진을 사용해 문서를 만든 후 전송합니다.

 

-redirect 메소드-

var express = require('express');
var http = require('http');

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
  res.redirect('http://google.co.kr');
});



http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

  res.redirect 메소드를 사용하여 구글 페이지로 넘긴다.

 

-익스프레스에서 요청 객체에 추가한 헤더와 파라미터 알아보기-

var express = require('express');
var http = require('http');

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
 var userAgent = req.header('User-Agent');
 var paramName = req.query.name;
    
    res.writeHead('200',{'Content-Type':'text/html;charset=utf8'});
    res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
    res.write('<div><p>User-Agent : '+userAgent+'</p></div>');
    res.write('<div><p>Param name : '+paramName+'</p></div>');
    res.end();
});



http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

 

추가한 정보 설명
query 클라이언트에서 GET 방식으로 전송한 요청 파라미터를 확인합니다.
body 클라이언트에서 POST 방식으로 전송한 요청 파라미터를 확인합니다.
단, body-parser와 같은 외장 모듈을 사용해야 합니다.
예)req.body.name
header(name) 헤더를 확인합니다.

 

'For developer > Node.js' 카테고리의 다른 글

(Node.js)쿠키와 세션  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(2)  (0) 2020.09.08
(Node.js)서버관련  (0) 2020.09.07
(Node.js)파일처리 관련(1)  (0) 2020.09.06
(Node.js)클릭관련  (0) 2020.09.06

+ Recent posts