app_route.js


1
2
3
4
5
6
7
8
9
10
11
12
var express = require('express');
var app = express();
 
var router1 = require('./routes/test1')(app);
app.use('/test1',router1);
 
var router2 = require('./routes/test2')(app);
app.use('/test2',router2);
 
app.listen(3000function(){
  console.log('Connected 3000 port');
});
cs



test1.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
module.exports = function(app){
  var express = require('express');
  var route = express.Router();
  route.get('/r1'function(req, res){
    res.send('Hello /test1/r1');
  });
  route.get('/r2'function(req, res){
    res.send('Hello /test1/r2');
  });
  app.get('/test3/r1'function(req, res){
    res.send('Hello /test3/r1');
  });
  return route;
};
cs


test2.js


1
2
3
4
5
6
7
8
9
10
11
module.exports = function(app){
  var express = require('express');
  var route = express.Router();
  route.get('/r1'function(req, res){
    res.send('Hello /test2/r1');
  });
  route.get('/r2'function(req, res){
    res.send('Hello /test2/r2');
  });
  return route;
};
cs



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

session  (0) 2017.03.02
cookie-parser  (0) 2017.02.27
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26

세션을 사용하려면 먼저 npm 에서 session 모듈을 설치한다.


npm install express-session --save



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var express = require('express');
var session = require('express-session'); //세션 모듈 가져오기
 
var app = express();
 
app.use(session({ //세션 모듈을 사용할수 있도록 호출
  secret:'123asd2312asd3',
  resave: false,
  saveUnunutualized:true //세션 ID를 실제로 세션을 사용하기전까지 발급하지 않게함
}));
 
app.get('/count',function(req,res){
 
  //count1 에 값 저장
  if(req.session.count1){
    req.session.count1++;  //세션 값 증가
  }else{
    req.session.count1=1;  //세션 값 세팅
  }
  //count2 에 값 저장
  if(req.session.count2){
    req.session.count2++;  //세션 값 증가
  }else{
    req.session.count2=1;  //세션 값 세팅
  }
  
  res.send('count1 : '+req.session.count1+'count2 : '+req.session.count2);
});
 
//count 1 세션 제거
app.get('/count1Close',function(req,res){
  delete req.session.count1;
  res.redirect('/count');
});
 
//count 2 세션 제거
app.get('/count2Close',function(req,res){
  delete req.session.count2;
  res.redirect('/count');
});
 
//세션 종료
app.get('/sessionClose',function(req,res){
  req.session.destroy(function(){});
  res.redirect('/count');
});
 
app.listen(3000function(){
  console.log('Connected 3000 port');
});
 
cs




세션의 값을 가져오거나 저장할때 req.session. 을 사용한다

세션의 값을 제거할 때는 delete req.session. 를 사용한다.

세션을 종료할때는 req.session.destroy(function(){});




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

라우터 분리  (0) 2017.03.02
cookie-parser  (0) 2017.02.27
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26

npm install cookie-parser


cookie-parser 는 쿠키를 사용하게해주는 모듈이다.


 

var express = require('express'); var cookieParser = require('cookie-parser'); //cookie-parser로드 var app = express(); app.use(cookieParser()); //cookie-parser 모듈 사용 app.get('/count',function(req,res){ if(req.cookies.count){ var count = parseInt(req.cookies.count); }else { var count = 0; } var count = count+1; res.cookie('count',count); res.send('count : '+req.cookies.count); }); app.listen(3000, function(){ console.log('Connected 3000 port'); });


res.cookie() 함수로 쿠키를 보낼수있고

req.cookies.cookiename 로 쿠키를 가져올 수 있다,


예제


 

var express = require('express');

var cookieParser = require('cookie-parser'); //cookie-parser로드 var app = express(); app.use(cookieParser()); //cookie-parser 모듈 사용 var products = { //products 배열객체생성 1:{title: 'The history of web 1'}, 2:{title: 'the next web'} }; //product list app.get('/products', function(req,res){ console.log('/products'); var output=''; for(var name in products){ //products 배열객체의 값들을 반복하는 for in 문 output += ` <li> <a href ="/cart/${name}">${products[name].title}</a> </li>` } res.send(`<h1>Products list</h1><ul>${output}</ul><a href ="/cart">Cart</a>`); }); //cart 에 product 쿠키로 product 저장 app.get('/cart/:id', function(req,res){ var id = req.params.id; //시맨틱url로넘어온 id 저장 if(req.cookies.cart){ //쿠키에 저장된 cart 가 존재할경우 var cart = req.cookies.cart; //cart변수에 cart 쿠키 저장 } else { //쿠키에 cart가 존재하지 않는경우 var cart={}; //cart 변수 초기화 } if(!cart[id]){ //cart[id] 배열에 값이 없으면 cart[id] = 0; //0으로 초기화 } cart[id] = parseInt(cart[id])+1; //id값에 해당하는 배열 +1 증가 res.cookie('cart',cart) //쿠키에 cart 전달 res.redirect('/cart'); //cart list 로 이동 }); //cart list cart에 저장된 쿠키 값 view app.get('/cart', function(req, res){ var cart = req.cookies.cart; //쿠키 값 받아옴 if(!cart) { //쿠키에 cart 값이 없다면 res.send('Empty!'); } else { //쿠키에 cart 값이 있다면 var output = ''; for(var id in cart){ output += `<li>${products[id].title} (${cart[id]})</li>`; } } res.send(` <h1>Cart</h1> <ul>${output}</ul> <a href="/products">Products List</a> `); }); app.listen(3003, function(){ console.log('Connected 3003 port'); });



쿠키 암호화

 

var cookieParser = require('cookie-parser'); //cookie-parser로드

app.use(cookieParser('3231ddas')); //cookie-parser 모듈 사용 //암호와 인자 키값 전달 app.get('/count',function(req,res){ if(req.signedCookies.count){ // signedCookies 는 암호화된 쿠키를 해독한 값을 가져올 수 있다. var count = parseInt(req.signedCookies.count); }else { var count = 0; } count = count+1; res.cookie('count',count,{signed:true}); //인자로 true 값 전달 res.send('count : '+req.signedCookies.count); });



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

라우터 분리  (0) 2017.03.02
session  (0) 2017.03.02
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26

npm install --save node-mysql


node-mysql 

node.js에서 mysql에 접근할수 있게해주는 모듈


 

var mysql = require('mysql');

var conn = mysql.createConnection({ host : 'localhost', //db접속 주소 user : 'root', //db접속id password : 'java0000', //db접속pw database : 'injava' //db명 }); conn.connect(); //db접속 var sql = 'SELECT * FROM board'; conn.query(sql,function(err,rows,fields) { if(err){ console.log(err); }else{ console.log('rows',rows); console.log('fields',fields); } }); conn.end();


mysql 모듈 로드후 conn 변수에 mysql.createConnection 함수로 db접속 정보를 담는다.

conn.connect(); 함수로 db에 접속하고

conn.query();함수에 쿼리문과 콜백함수를 인자로 전달한다.

쿼리문이 실행되고나서 실행되는 콜백함수의 인자인 rows에는 행의 정보가담겨있는 배열이다.

fields 에는 컬럼에관한 정보가 담겨있다.




 

var sql = 'SELECT * FROM board';

conn.query(sql,function(err,rows,fields) { if(err){ console.log(err); }else{ for(var i =0;i<rows.length;i++){ console.log(rows[i].board_title); } } });


rows 에는 쿼리문을 실행해 가져온 행의 배열이다 rows[인덱스번호].컬럼명 으로 특정값을 가져올수 있다.


 

var sql = 'INSERT INTO board(board_title,board_user,board_pw,board_content)VALUES(?,?,?,?)';

var params = ['test title','testuser','testpw','testcontent']; conn.query(sql,params,function(err,rows,fields) { if(err){ console.log(err); }else{ console.log(rows.insertId); } });


쿼리문에 ?,?,?,? 는

conn.query() 함수에 두번째 인자로 배열을 주게되면 배열의 값이 치환되어 쿼리문에 들어가 실행되게된다.


rows.insertId 는 db에 입력될때 생성되는 auto_increment 값을 알아낼수 있다.


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

session  (0) 2017.03.02
cookie-parser  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26

express에서는 파일을 업로드할때 미들웨어를 사용한다.


multer 

express를 이용해서 파일을 저장하는 모듈


app_file.js

 

var express = require('express');

var fs = require('fs'); var bodyParser = require('body-Parser'); var multer = require('multer'); var upload = multer({dest:'uploads/'}) //업로드가 가능한 미들웨어를 담는 함수 //dest: 는 경로 var app = express(); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); app.set('view engine','jade');

//파일업로드 폼 app.get('/upload',function(req,res){ console.log('upload GET') res.render('upload'); }); // single함수의 역할은 사용자가 전송한 데이터에 파일이 포함된다면 파일을 request에 전달한다. app.post('/upload',upload.single('userfile'),function(req,res){ console.log('upload POST') console.log(req.file); res.send('uploaded : '+req.file.filename) });


var multer = require('multer'); var upload = multer({dest:'uploads/'})m

multer 모듈을 require 하고 변수에 담는다. dest에는 파일을 저장할 경로명을 지정한다.
app.post('/upload',upload.single('userfile'),function(req,res)
app.post에 두번째 인자로 single함수를 전달한다. 이함수의 역할은 전송한 데이터에 파일이 포함된다면
request 에 file 이라는 프로퍼티에 파일의 정보를 전달한다. 
console.log(req.file); 결과




uplode.jade

 

doctype html

html head meta(chartset='') body form(action='/upload' method ='post' enctype = "multipart/form-data") input(type='file' name = 'userfile') input(type = 'submit')


파일업로드 폼은 enctype = "multipart/form-data" 속성을 주어야한다.


파일명 원본으로 업로드 방법

multer는 기본으로 랜덤의 파일명을 생성해 업로드한다. 이것을 파일명으로 업로드하려면

multer의 옵션을 변경해야 한다.


 

var express = require('express');

var fs = require('fs'); var bodyParser = require('body-Parser'); var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') //경로 지정 콜백함수 }, filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now()) //파일명 지정 콜백함수 } }) var upload = multer({ storage: storage }); var app = express(); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); app.set('view engine','jade'); app.get('/upload',function(req,res){ console.log('upload GET') res.render('upload'); }); app.post('/upload',upload.single('userfile'),function(req,res){ console.log('upload POST') console.log(req.file); res.send('uploaded : '+req.file.filename) });


storage변수에 콜백함수로 경로와 파일명을 지정

var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') //경로 지정 콜백함수 } filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now()) //파일명 지정 콜백함수 } })


옵션지정

var upload = multer({ storage: storage });



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

cookie-parser  (0) 2017.02.27
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26

EJS 템플릿 엔진은 html과 문법이 유사하다. 

다른 템플릿 엔진인 jade는 html과 문법이 다르다는점에서 jade와ejs는 차이가있다.


npm프로젝트에서 npm install ejs 명령어로 설치한다.


ejs는 jsp와 문법이 비슷하다 <% %> 를 사용하여 서버의 데이터를 가져오거나 코드를 실행할수있다.

<% 자바스크립트코드 %> 

<%= 자바스크립트 객체%> 


app.js

 

var express = require('express');

var app = express(); var fs = require('fs'); var bodyParser = require('body-Parser'); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); // 정적 파일 위치 지정 app.set('view engine','ejs'); // 템플릿 엔진 세팅 app.get('/ejstest',function(req,res){ res.render('ejstest',{ title : 'title', num : 5}); }); app.listen(3000,function(){ console.log('Connected, 3000 port!'); });


ejstest.ejs

 

<html>

<head> <title><%= title %></title> //라우터에서 받은 객체의 title 값 사용 </head> <body> <h1>Loop</h1> <ul> <% for(var i = 0; i<num; i++){%> //라우터에서 받은 객체의 num 값 사용 <li> <%="Loop" + i%> </li> <%}%> </ul> </body


<% %> 안에 for문을 넣어 사용할수도 있고 객체의 값을 꺼내올수도 있다.




<% include ejstest.ejs%> 를 사용하면 jsp의 include 처럼 다른 소스코드를 포함시킬수있다.

 

app.js의 라우터는 includetest.ejs 파일을 렌더링하고있다.

 

app.get('/includetest',function(req,res){

res.render('includetest',{ title : 'title', num : 5}); });


includetest.ejs

 

<% include ejstest.ejs%>


includetest.ejs에 include 로 ejstest의 소스코드를 포함시켜 실행하면 ejstest.ejs 의 내용이 실행된다.




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

node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
파일업로드 / multer  (0) 2017.02.27
post 방식 데이터 전달 / 사용  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26
jade 템플릿 엔진  (0) 2017.02.26


form.jade

 

doctype html

html head meta(charset = 'utf-8') body form(action='/form_receiver' method='post') p input(type='text' name='title') p textarea(name='description') p input(type='submit')


jade 템플릿에서는 태그의 속성 표시 문법으로 ()안에 속성을 추가한다. 

form(action='/form_receiver' method='post')



Express api 문서를 보면 post방식으로 전달된 데이터는 정의되어있지 않기 때문에

그 데이터를 사용하려면 body-parser 또는 multer 라는 미들웨어를 설치 해야한다.

body-parser 모듈을 애플리케이션에 붙이게되면 모든 요청은 먼저 미들웨어를 통과한 다음 라우터가 동작한다.

 

var express = require('express');

var app = express(); var bodyParser = require('body-parser'); //post방식 데이터를 사용하게해주는 bodyParser 모듈 로드 app.use(bodyParser.urlencoded({ extended: true })); //bodyParser모듈을 애플리케이션 객체에 붙이는코드 app.locals.pretty = true; //템플릿 엔진 코드에 들여쓰기 적용해주는 코드 app.set('view engine','jade'); //템플릿 엔진을 세팅하고 express와 연결하는 코드 app.set('views','./views'); //정적인 파일이 위치할 디렉터리를 지정하는 코드 app.get('/form',function(req,res){ // /form 요청을 받는 라우터 res.render('form'); //form.jade 파일을 랜더링해 사용자에게 보여주는코드 }); app.post('/form_receiver',function(req,res){ //post 방식의 요청을 받는 라우터 var title = req.body.title; var description = req.body.description; res.send(title+' '+description); }); app.listen(3000,function(){ console.log('Connected 3000 port'); });


cmd창에서 패키지에 body-parser 이라는 모듈을 설치하고

var bodyParser = require('body-parser');  모듈을로드한다. 이모듈은 post방식의 데이터를 사용할수 있게해준다.

app.use(bodyParser.urlencoded({ extended: true })); 이코드는 body-parser모듈을 애플리케이션에 붙이는코드이다.

이제 모든 요청은 미들웨어인 body-parser를 거쳐서 라우터로 오게된다.

get방식의요청은 app.set() post방식의요청은app.post() 으로 받는다.

get방식의 데이터는 req.query.name 으로 가져오지만 post방식의 데이터는 req.body.title 이런식으로 가져온다.









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

파일업로드 / multer  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26
jade 템플릿 엔진  (0) 2017.02.26
정적페이지 / 동적페이지 표현  (0) 2017.02.26

get 방식 데이터 전달 (쿼리스트링)

get 방식으로 전달한 데이터는 req.query.name  를 사용해 가져온다.

request가 담긴 변수인 req 안의 query 객체에 get방식으로 보낸 데이터가 저장된다.


 

var express = require('express');

var app = express(); app.get('/topic', function(req, res){ var topics = [ 'Javascript is....', 'Nodejs is...', 'Express is...' ]; var output = ` <a href="/topic?id=0">JavaScript</a><br> <a href="/topic?id=1">Nodejs</a><br> <a href="/topic?id=2">Express</a><br><br> ${topics[req.query.id]} ` res.send(output); }); app.listen(3000,function(){ console.log('Connected 3000 port'); });


/topic 주소로 요청시

topics 이라는 배열에 문자열을 저장하고  인덱스에 쿼리스트링 객체 안의 id의 값을 전달해 

배열을 가져와 화면에 출력





semantic URL


시멘틱 URL은 쿼리스트링을 사용하지 않고 전달하는 방식이다.

http://localhost:3000/topic/2 이런식으로 요청한다.

시멘틱 방식일때는 라우터에 url의 패스 형식을 걸어준다. pp.get('/topic/:id'

/topic/2 로 요청이 온다면 id 라는 변수명으로 2 라는 값이 저장된다.

그값은 request 변수인 req의 params 객체에 저장되어있다. req.params.id  이런식으로 꺼내올수있다.

두개 이상의 값을 전달하려면 app.get('/topic/:id/:mode' 이런식으로 /:변수명/:변수명 이어서 작성한다.


 

var express = require('express');

var app = express(); app.get('/topic/:id', function(req, res){ var topics = [ 'Javascript is....', 'Nodejs is...', 'Express is...' ]; var output = ` <a href="/topic?id=0">JavaScript</a><br> <a href="/topic?id=1">Nodejs</a><br> <a href="/topic?id=2">Express</a><br><br> ${topics[req.params.id]} ` res.send(output); }); app.get('/topic/:id/:mode', function(req, res){ res.send(req.params.id+','+req.params.mode) }); app.listen(3000,function(){ console.log('Connected 3000 port'); });


 





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

EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26
jade 템플릿 엔진  (0) 2017.02.26
정적페이지 / 동적페이지 표현  (0) 2017.02.26
Express 로 웹 애플리케이션 만들기  (0) 2017.02.26

+ Recent posts