Export


1
2
3
4
5
6
var exports = module.exports = {};
 
 
exports.name = function(){
    //doSomething
};
cs

.js 파일은 만들고 위와 같이 입력한다.
함수를 사용할때는 4-6라인처럼 입력하면된다.


Import

1
const db = require('../routes/sample.js');
cs

export와 import를 이용하여 코드를 깔끔하게 작성할 수 있다.


'Programming > Node.JS' 카테고리의 다른 글

지금 현재 서버의 ip를 알고 싶을때  (0) 2016.09.14
mysql 모듈  (0) 2016.09.05
Cluster  (0) 2016.09.05
코딩의 관례  (0) 2016.09.05
express.js 구조  (0) 2016.09.05

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress


'Programming > Node.JS' 카테고리의 다른 글

Export / Import  (0) 2016.09.14
mysql 모듈  (0) 2016.09.05
Cluster  (0) 2016.09.05
코딩의 관례  (0) 2016.09.05
express.js 구조  (0) 2016.09.05

MySQL설치


npm install mysql --save






사용법


1
2
3
4
5
6
7
8
9
10
11
12
13
14
var mysql = require('mysql');
var client = mysql.createClient({
    user : 'root',
    password : 'passwd'
    database : Company
});
 
client.query('SELECT * FROM products'function(err, result, fields){
    if(err){
        console.log('err');
    }else{
        console.log(result);
    }
});
cs


mysql모듈을 추출하여 createClient로 사용자 이름과 비밀번호를 정의한다. 그리고 database로 사용할 데이터 베이스를 정의한다. 


Client객체의 메서드에는 query가 있어서 쿼리문장을 직접 입력할 수 있다. 쿼리문장을 실행후에 result값으로 리턴해준다.


1
2
3
client.query('INSERT INTO products (name, modelnumber, series) VALUES (?,?,?)',[
'req.body.name''req.body.number''req.body.series'], function(err, result, fields){
 
});
cs


'?'토큰을 사용하여 쿼리문에 변수를 넣을수도 있다.

'Programming > Node.JS' 카테고리의 다른 글

Export / Import  (0) 2016.09.14
지금 현재 서버의 ip를 알고 싶을때  (0) 2016.09.14
Cluster  (0) 2016.09.05
코딩의 관례  (0) 2016.09.05
express.js 구조  (0) 2016.09.05

노드는 싱글 스레드로 동작하기 때문에 멀티 프로세스의 이점을 보지 못한다. IO에 대한 처리는 이벤트 루프를 통해서 좋은 성능을 보여주지만 ,CPU계산양이 많은 부분에서는 성능이 급격하게 떨어진다. 

이부분을 클러스터링을 통해서 상당 부분 해결 할 수있다.


var cluster = require('cluster');


cluster.isMaster()와 cluster.isWorker()로 현재 프로세스가 마스터 프로세스인지 워커 프로세스인지 알수있다.

내부적으로는 process.env.NODE_WORKER_ID === undefined이면 마스터 프로세스로 판단한다.


마스터 프로세스일 경우에는 워커프로세스를 생성하고, 워커 프로세스일 경우에 HTTP 서버를 생성한다.


require('os').cpus().length를 사용하면 CPU의 개수를 알수 있으므로, 프로세스마다 하나의 워커 프로세스를 같게 CPU개수 만큼 cluster.fork()로 워커 프로세스를 생성한다. 

워커 프로세스를 생성할때, 균일하게 생성해 주기 위해서

cluster.schedulingPolicy = cluster.SCHED_NONE; //워커 스케쥴을 OS에 맡긴다.

cluster.schedulingPolicy = cluster.SCHED_RR; //워커 스케쥴을 Round Robin 방식으로 한다.
중 라운드 로빈 방식을 사용하기로 한다.


워커 프로세스가 생성되면 online이벤트 cluster.on('online', founction(worker){ }); 가 생성되어 워커의 정보를 알수있으며,

워커 프로세스가 종료할 때 발생하는 exit이벤트cluster.on('exit')를 주어서 프로세스가 종료할때 프로세스 아이디를 출력해 줬지만, 다시 cluster.fork()를 호출에 다시 프로세서를 생성할 수 도있다.


cluster.on('online', function (worker) {

 console.log('생성된 워커의 아이디 : ' + worker.process.pid);

});

 

cluster.on('exit', function (worker, code, signal) {

  console.log('죽은 워커의 아이디 : ' + worker.process.pid);

  console.log('죽은 워커의 exit code : ' + code);

  console.log('죽은 워커의 signal : ' + signal);

}); 




윈도우에서는 SET NODE_DEBUG=cluster를 실행후, node app.js 를 실행 한다.

그외에서는 NODE_DEBUG=cluster node app.js 를 실행한다.


cluster.fork()로 생성도니 프로세스간에는 메시지를 전달할 수있다.

마스터 프로세스에

worker.on('message', function(msg){});이벤트를 등록해서 워커프로세스의 메시지를 수신하는 부분이다.

werker.send(message)를 통하여 워커프로세스에게 메시지를 보낸다.

워커 프로세스에

process.send({cmd: " "});로 마스터 프로세스에 메시지를 보낼수 있다.

process.on('message', function(msg){ }); 마스터 프로세스로 부터 전송받은 메시지를 처리하는 이벤트


'Programming > Node.JS' 카테고리의 다른 글

지금 현재 서버의 ip를 알고 싶을때  (0) 2016.09.14
mysql 모듈  (0) 2016.09.05
코딩의 관례  (0) 2016.09.05
express.js 구조  (0) 2016.09.05
Express.js 설치하기  (0) 2016.09.05

들여쓰기

공백 2칸


세미콜론

항상 사용


작은따옴표

문자열 등은 큰따옴표 대신 작은 따옴표


중괄호

if(true){

//doSometiong

}


변수와 프로퍼티

소문자로시작하는 카멜 케이스 사용


클래스

대문자로 시작하는 카멜 케이스 사용


상수

모두 대문자


동등비교

==대신 ===사용


콜백

첫파라미터는 에러 파라미터로 사용한다.

callback(err, param1, param2)



콤마

콤마로 여러불 걸쳐 나열 할때는 콤마를 라인 옆에 쓴다.

var a

, b;



***카멜 표기법

  • "camelCase"
  • 각 단어의 첫문자를 대문자로 표기하고 붙여쓰되, 맨처음 문자는 소문자로 표기함
  • 띄어쓰기 대신 대문자로 단어를 구분하는 표기 방식
  • 예시: backgroundColor, typeName, iPhone

***파스칼 표기법

  • "PascalCase"
  • 첫 단어를 대문자로 시작하는 표기법
  • 예시: BackgroundColor, TypeName, PowerPoint


'Programming > Node.JS' 카테고리의 다른 글

mysql 모듈  (0) 2016.09.05
Cluster  (0) 2016.09.05
express.js 구조  (0) 2016.09.05
Express.js 설치하기  (0) 2016.09.05
http모듈  (0) 2016.09.03

express.js 구조


express.js 를 설치하면 다음과 같은 파일들이 폴더내에 설치된다.

살펴보도록하자.

요약

* app.js 익스프레스의 메인 파일로 웹서버 생성, 라우팅 등을 모두 app.js에서 한다.


* package.json 프로젝트의 정보를 담고있는 npm 설정파일이다.


* route/ 라우팅 관련 함수, 즉 URL에 따라 호출될 함수를 모아두는 디텍토리다. 라우팅에 있는 파일들을 app.js 에서 불러

와 웹서버에 라우팅을 연결한다.


* public/ css, 자바스크립트, 이미지 등의 정적 파일을 모아두는 리렉토리이다. 기본적으로 style.css가 생성되어있다.


* views/ 뷰 파일이 위치하는 디렉토리이다. 자바라면 JSP파일이 위치하는 디렉토리와 같고, 여기선 ejs템플릿을  사용 하므

로*.ejs파일이 존재한다


package.json


package.json에서는 프로그램 이름, 버전등 노드의 정보를 기술하는 곳이다.

또한 npm install로 설치시에 이 패키지를 참조하여 해당 버전에 맞는  npm을 설치하게 된다. 

npm install 시에 사용하고자 하는 모듈 입력후 --save를 입력하면 자동으로 package.json에 입력이 된다.




bin/www


서버구동을 위한 코드가 기록되어있다. express 서버설정 코드가 기록된 app.js 파일을 가져와서 노드의 http객체와 연동하는 작업이 이루어 지는 부분이다. 실제 서버를 구동하는 파일이다.


app.js


bin/www에서 사용되는 이 파일은 express 설정파일이 담겨있는 핵심 부분이다. express 객체를 생성하고 환경 설정을한다.

라우팅설정을 정희하고, 다향한 모듈을 추출하여 사용한다.



morgan : http 요청에 대해 로깅하는 모듈이다.

body-parser : http 요청중 POST 요청의 데이터에 접근하기 위한 모듈이다. (request.body사용을 위함)

cookie-parser : http로 요청한 클라이언트 쿠키 정보에 접근하기 위한 모듈이다. (set-Cookie : { })



app.set은 특정 키에 값을 설정할때 사용하고, app.use는 익스프레스에서 사용할 미들웨어를 결정한다.

app.set을 이용하여 views키에 views파일의 경로를 지정하고, view의 템플릿 엔진을 ejs로 정의하는 부분이다.



logger('dev')에서 dev는 morgan이 지원하는 로그 포맷이다. 지원 포맷으로는 default, short, tiny, dev가 있다.

이에 대해서는 다음에 자세히 알아보도록하자


여기서 익스프레스는 기본적으로 요청의 바디를 처리하지 않으므로, express.bodyParser()를 사용하여 application/json의 바디를 파싱해 req.body 변수에 할당한다.


urlencodede 의 exteneded를 true로 고치면, UTF-8 인코딩을 사용하여 parsing 하겠다는 뜻이다.

그리고 cookieParser()를 사용하여 Header에 쿠키 부분을 추가하는 부분이며


__dirname/public 의 경로를 전역으로 사용하여서 CSS나 자바스크립트 같은 정적 파일이 있는 위치를 지정한다.



express초기에 설치되지는 않았지만, REST스러운 웹사이트를 구축하려면 GET, POST이외에 PUT, DELETE메소드를 사용해야한다. 하지만 웹브라우저에서는 GET과 POST만 지원하는데 프론트에서 <form> 태그에 다음과 같은 <input>태그를 두어 PUT 이다 DELETE 메소드를 지정한다.


 <input type = 'hidden' name ='_method' value = 'PUT'>



methodOverride설치법

 

npm install method-override --save로 설치하고 

var methodOverride = require('method-override');

app.use(methodOverride({'_method'})); 



그리고 route를 위한 코드이다.

app.use('/', routes); routes폴더내에 있는 index(default 값)를 찾는다

해당 url로 접속하는 것을 routes/index로 보내어서 그안에서 각각의 요청(GET/ POST)을 통해 처리한다

routes 폴더 내에있는 해당 미들웨어를 찾는 것이다


routes/index.js



express 를 추출하고 express.Router()를 사용하여  라우터 객체를 생성하였다.

그리고 router.get부분은 해당 url로 get요청이 들어왔을때, 생기는 이벤트를 처리하는 루프로써,

여기서는 indes.ejs 화면을 출력한다.

그리고 module.exports = router를 사용하여 이 모듈을 외부에서 참조 할수있게 만들었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (app.get('env'=== 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}
 
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});
cs


또한 error 처리는 app.get('env') === 'development'이면 스택트레이서를 출력해주고

그렇지 않으면 스택트레이서를 출력하지 않는다.

기본값은 Development로 지정되어있는데 이를 변경하고 싶다면

NODE_ENV=production node app.js 로 실행하면된다

윈도우에서 실행할때는 set NODE_ENV = production인 변수를 지정해주면된다.

이상으로 express.js의 기본적인 구조에 대하여 알아보았다.

'Programming > Node.JS' 카테고리의 다른 글

Cluster  (0) 2016.09.05
코딩의 관례  (0) 2016.09.05
Express.js 설치하기  (0) 2016.09.05
http모듈  (0) 2016.09.03
Event개념 이해  (0) 2016.09.03

설치




express [옵션] [경로]

옵션에는 세션, 템플릿, CSS엔진을 선택 할 수 있다


cmd 창을 열어서


npm install -g express-generator

express nodeSample -ejs


를 차례로 입력한다.


템플릿을 ejs로 만들기위해 -ejs 옵션을 주었다.

그러면 다음과 같은 화면이 출력된다.



그후 다음을 입력하여 express.js 를 설치한다.

여기서 nodeSample은 만들고자하는 폴더 명이니, 사용하고싶은 이름으로 사용하도록하자.


 cd nodeSample && npm install



설치 완료된 화면이다.



npm install -g nodemon --save 하면 nodemon을 실행시킬수있다!


'Programming > Node.JS' 카테고리의 다른 글

코딩의 관례  (0) 2016.09.05
express.js 구조  (0) 2016.09.05
http모듈  (0) 2016.09.03
Event개념 이해  (0) 2016.09.03
기본 내장 모듈  (0) 2016.09.03


HTTPTCP/IP를 기반으로 하는 프로토콜

HTML 페이지를 전달하는데 쓰는 프로토콜이지만 다른 파일을 전송할 때도 많이 사용

데이터 전송방식 : url, post 방식으로 데이터를 전송

 

server객체

var http = require(‘http’);

var server = http.createServer();

server.listen(port);


Server 객체의 메서드

listen()

서버 실행

close()

서버 종료

 

Server 객체의 이벤트

request

클라이언트가 요청할 때 발생하는 이벤트

connection

클라이언트가 접속할 때 발생하는 이벤트

close

서버 종료될 때 발생하는 이벤트

checkContinue

클라이언트가 지속적 연결을 하고 있을 때 발생하는 이벤트

upgrade

클라이언트가 HTTP업그레이드 요청 할 때 발생하는 이벤트

clientError

클라이언트에서 오류발생시 발생하는 이벤트


require(‘http’).createServer(function(req,res){

res.writeHead(200, {‘Content-Type’ : ‘text/html’});

res.end(/*filename*/);

});


text/plain

text/html

text/css

text/xml

image/jpeg

image/png

image/mpeg

audio/mp3


쿠키

- 키와 값이 들어있는 작은 데이터 조각

이름, , 파기 날짜, 경로 정보 저장

res.writeHead(200, {‘Content-Type’ : ‘text/html’

Set-Cookie : [‘name= name’, ‘value = value’]});

res.end(/*filename*/);

 

파일 강제 이동

responese.writeHead(302, {‘Location’ : ‘http://www.naver.com’});

 

request객체

method

클라이언트 요청방식

url

클라이언트가 요청한 url

headers

요청 메시지 헤더

trailers

요청 메시지 트레일러

httpVersion

HTTP 프로토콜 버전

 

url객체와 request객체가 함께 사용되어var pathname = url.parse(request.url).pathname처럼 사용됨

 

POST요청 매개 변수 추출

request.on(‘data’, function(data){

console.log(data);

});

 

쿠키추출

var cookie = req.headers.cookie;

cookie = cookie.split(‘;’).map(function(element){

var element = element.split(‘=’);

return {

key : element[0],

value : element[1]

};

}


'Programming > Node.JS' 카테고리의 다른 글

express.js 구조  (0) 2016.09.05
Express.js 설치하기  (0) 2016.09.05
Event개념 이해  (0) 2016.09.03
기본 내장 모듈  (0) 2016.09.03
전역 객체에 대하여  (0) 2016.09.03

+ Recent posts