미들웨어 개념

Node js 2015. 12. 21. 22:59

요청의 응답이 완료하기전까지  요청 중간중간에   여러가지 일을 처리할수있다  

이러한일들을  하는것들을 미들웨어라고하고 

각각의 중간중간에 여러가지 일을  하도록  여러가지 기능의  특정한  일을  수행하는  미들웨어를 모듈별로 나눠서 사용할수 있다 -- 마치 한클래스에 한기능으로 이용하듯이 말이다 .



미들웨어 종류 

1. static 미들웨어 

웹서버에  전역변수 __dirname을 사용하여 폴더위치에있는내용을 모두 웹서버 에 올린다 


2.router 미들웨어 

페이지 라우팅을 구현하는 미들웨어 

페이지라우팅은 클라이언트 요청에 적절한 페이지를 서비스제공하는 기술입니다.


3. 쿠키 parser 미들웨어 

요청쿠키를 추출하는 미들웨어입니다.


4.바디 parser 미들웨어 

post 요청 데이터를 추출하는 미들웨어입니다.

request 객체 body 속성이 부여됩니다.


5. 세션미들웨어 

세션 미들웨어는 세션을 쉽게 생성할 수있게 도와주는 미들웨어입니다.

Posted by 이상욱1
,

[Node.JS] npm 광역설치 시 모듈을 못 찾는 문제

npm으로 Node.JS용 모둘을 광역 설치(-g) 했을 때 모듈을 못 찾는 경우가 있다. 내 경우 homebrew로 Node.JS를 설치한 상태에서 기본적인 방법으로 npm을 설치한 상태였는데 -g 옵션으로 설치한 모듈을 전혀 읽지 못 하였다.

아래 에러 로그는 npm install -g express jade 명령으로 express와 jade를 광역설치한 상태에서 해당 모듈을 사용하는 스크립트를 구동했을 때 찍히는 에러로그이다.
node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Cannot find module 'express'
    at Function._resolveFilename (module.js:322:11)
    at Function._load (module.js:267:25)
    at require (module.js:351:19)
    at Object.<anonymous> (/Users/hirenn/Devel/tmp/test.js:1:77)
    at Module._compile (module.js:407:26)
    at Object..js (module.js:413:10)
    at Module.load (module.js:339:31)
    at Function._load (module.js:298:12)
    at Array.<anonymous> (module.js:426:10)
    at EventEmitter._tickCallback (node.js:126:26)
문제의 원인은 모듈이 설치되는 디렉토리에 있다.
  • npm으로 설치한 모듈은 /usr/local/lib/node_modules에 설치된다.
  • 하지만 Node.JS는 모듈을 /usr/local/lib/node에서 찾는다.

그렇다면 단순히 해결을 위해서는 node_modules의 내용을 node로 몽땅 복사해 주면 될 것이다. 하지만 이렇게 해 버리면 npm으로 모듈을 새로 설치할 때 마다 복사해 줘야 하는 수고가 발생한다.

따라서 효율적으로 문제을 해결하기 위해서는 node_modules를 node로 링크를 걸어주면 될 것이다.

우선 링크를 걸기 전에 /usr/local/lib/node 디렉토리의 내용을 살펴보니 wafadmin 라는 심볼릭 링크가 하나 걸려 있었다. 그래서 이 링크를 node_modules에도 동일하게 걸어준다.
$ cd /usr/local/lib/node
$ ls -al
total 8
drwxr-xr-x   3 user    group   102  5 24 12:33 ./
drwxr-xr-x  32 user    group  1088  8  5 14:48 ../
lrwxr-xr-x   1 user    group    41  5 24 12:33 wafadmin@ -> ../../Cellar/node/0.4.8/lib/node/wafadmin

$ ln -s ../../Cellar/node/0.4.8/lib/node/wafadmin /usr/local/lib/node_modules/
그리고 기존 node디렉토리를 old.node로 변경하고(혹은 삭제하고) node_modules를 node로 링크를 걸어준다.
$ mv node old.node
$ ln -s /usr/local/lib/node_modules node
이 후 확인을 해 보니 모듈을 제대로 읽어들이게 되었다.


http://seorenn.blogspot.kr/2011/08/nodejs-npm.html
추신) 이 해결법에서 경로 등의 정보는 Node.JS의 버전이나 설치된 환경에 따라 달라질 수 있다.


Posted by 이상욱1
,

project -properties - utf-8로 변경


window - preferences - general - workspace - utf-8 변경




출처http://nkcnow.tistory.com/entry/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-nodejs%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80-%EC%B6%9C%EB%A0%A5%EC%8B%9C-%EC%BD%98%EC%86%94-%EA%B9%A8%EC%A7%90-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0


Posted by 이상욱1
,

NODEJS WEBSERVER 뛰우기

Node js 2015. 6. 23. 11:10



 Nodejs는 Java를 사용할 때 import 하는 것 처럼, 모듈을 추출 한 후 사용 해야 한다. 임의의 파일을 만들어서 작성 하자.



Step 1. http 모듈을 추출 한다.




var http = require('http');




Step 2. server를 생성 한다.

  Event 기반으로 동작 한다. request에 대한 이벤트는 따로 처리를 해주지 않아도 받을 수 있다. 




http.createServer(function (request, response) {

response.writeHead(200,{

'Content-Type': 'text/html',

});

response.end('<h1>Hello World!!</h1>');

}).listen(10001, function() {

console.log('Server Start....');

});




Step 3. 임의의 파일을 실행 한다.

 명령 프롬프트나 쉘에서 'node 파일명' 을 작성 하면 된다.




E:\>nodejs>node node.server.js

Server Start....




Step 4. 인터넷 브라우저에서 http://localhost:10001 로 접속하여 확인 한다.

 아래와 같은 모습을 확인 할 수 있다.





 Nodejs로 프로그래밍을 하다보면 Servlet/Jsp로 개발했을 당시의 상황과 비슷한거 같지만, Nodejs는 수동적으로 파일을 스트림으로 읽어서 직접 Http 헤더 작성 후, 파일을 첨부하여 클라이언트로 전송해야만 페이지를 볼 수 있다. 


출처 :http://blog.whitelife.co.kr/22

Posted by 이상욱1
,

동기는 멀티쓰레드는 어차피 분신이 생겨도 하나씩 일처리 밖에 안된다 


즉 일의 양은 각 쓰레드당 5까지 처리하면  다 끝나는거다  

1번 쓰레드  2번 쓰레드 3번 쓰레드  4번 쓰레드 5번 쓰레드 

이렇게 있다면 순서는 

1 번  ->   1번     ->    1번  ->     1번     -> 1번 

2번   ->   2번    ->    2번   ->    2번     ->   2번 

이런식으로 돌아간다 

그러므로 가끔식 윈도우 상 엑스가 안먹힐때는 다른놈의 일처리를 하고있어서 동기에 맞게 돌아가고 있어서 x 키 순서가 아녀서 안먹히는 것이다.

 

하지만 비동기는 가장 먼저 들어온 놈을 가장 빨리 끝낼 수 있는 놈 부터 처리 한다 


하지만 비동기는  예로 3번이 먼저들어 오면  3번을 처리한다 

여기서 의문이 든다  비동기로 돌리는데 3번을 처리하는 속도보다 유입 하는 속도가 빠르다면 예로  3번이 3까지 처리 했는데  2번이 들어왔다 그런데 3번이 5까지 처리하는것보다 2번이 1부터 5까지 처리하는 것이 3번이 3~ 5까지 처리하는것 보다 빠르다면 더 빠른놈인 2번 부터 처리한다 .

즉  비동기 에서는 과부하가 일어났을때 음악 듣고있는 프로그램 엑스를 누른다면 바로 먹히면서 꺼진다 왜냐하면 x라는 새로운 이벤트가 들어왔는데 과부하로 일어나고 있는놈 보다 훨씬 빨리 끝날 이벤트이기 때문이다 .

 

비동기화는 데이타 손실이생긴다 이러한면은 

빅데이터에서 1000만건의 데이터 중에 10건의 데이터는 불확실해도  살아있는 데이타를 뽑을 수있다는 속도와  큰데이타가 중요하다는 부분에  잘 맞물린다.


노sql은 구조가 달라서 데이타를 빠르게 산재하고 디비 어세스 퍼포먼스가 트리식으로 접근 하는 예전 디비와 달라서 속도가 빠르다.


rdbs 는 동기화가 무조건 이루어진다 예로 db.close()

Posted by 이상욱1
,



   『모던 웹을 위한 Node.js 프로그래밍』보면서 차근히 따라하고 있는데..  express에서 미들웨어 사용하다가 난관에 부딪혔다.


   logger 쓰려고 했더니, 에러가 빡!! 미들웨어가 더이상 번들로 설치되어 있는 게 아니니 따로 설치하란다. 이게 뭔...?


   또다시 구글링... 구글링구글구긆릉르르르ㅏ르르르르 


   http://stackoverflow.com/questions/23526356/heroku-node-js-server-crash-with-error-most-middleware-like-logger-is-no-lo


    ↑ 이 사람 글을 보니, 2가지 방법이 있댄다. logger 대신에 morgan을 설치해서 사용하든가, express가 설치된 폴더 안에서 package.json 파일을 찾아서 express 버전을 3.x대로 변경해주면 된다나.


   좀더 찾아보니 morgan이 4.x 버전에서는 logger을 대신해서 같은 역할을 하는 미들웨어란다.


   고로.. 4.x 버전에서는 이제 아래와 같이 써줘야 에러없이 잘 돌아간다. (npm install morgan으로 우선 morgan 설치해줘야 함)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 모듈 추출
var express = require("express");
var morgan = require("morgan");
 
// 서버 생성
var app = express();
 
// 미들웨어 설정
// app.use(express.logger()); // 3.X 버전에서만 실행되고 4.X 버전에서는 에러 발생.
 
//app.use(morgan()); // 고로, 4.X 버전에서는 morgan을 사용해야 함. logger와 같은 역할.
app.use(morgan('dev'));
 
app.use(function (request, response, next) {
    response.send("<h1>come on express~~</h1>");
});
 
// 서버 실행
http.createServer(app).listen(1799, function () {
    console.log("Server Running at http://127.0.0.1:1799");
});



   http://blog.naver.com/PostView.nhn?blogId=rintiantta&logNo=40207854837


   ↑ 그리고 우연찮게 검색 중에 책의 저자가 운영하는 블로그를 발견했는데.. 헐... 뭐 바뀐 게 이리 많아?


   https://github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x


   ↑ 일단 이제 막 express 시작하는 참이라 아직 뭐가 뭔지 잘 모르겠지만,, 버전 업에 따른 변경 사항에 이것도 좀 참고해야겠다.



결과 값 

Server Running at http://127.0.0.1:1799

[0mGET / [32m200 [0m13.760 ms - 26[0m

[0mGET /favicon.ico [32m200 [0m3.737 ms - 26[0m



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

NODEJS WEBSERVER 뛰우기  (0) 2015.06.23
비동기와 동기의 이해  (0) 2015.06.22
express 모듈과 http 모듈의 차이  (0) 2015.03.30
express param 예제  (0) 2015.03.30
nodejs express 모듈 출력 예제  (0) 2015.03.30
Posted by 이상욱1
,

두 모듈의 차이는  expres 모듈에는 미들웨어라는 개념이 있다 

그래서 use()  를 사용하고  

각각의 use는 각각의 특정한 일을 수행하는 모듈을 분리해서 만들 수 있습니다 

또한 express 모듈에는 참조할 만 한 다양한 모듈이 있습니다. 

/**

 * New node file

 */

var http =require('http');

var express=require('express');


var app=express();


app.use(function(request, response, next){

console.log('1 midleware ');

next();

});


app.use(function(request, response, next){

console.log('2 midleware ');

next();

});

app.use(function(request, response, next){

console.log('3 midleware ');

next();

});

app.use(function(request, response, next){

request.number=52;

response.number=273;

next();

});


app.use(function(request, response, next){

response.send('<h1>'+request.number+':'+response.number+'</h1>');

});



http.createServer(app).listen(52275, function(){

console.log('server running at http://127.0.0.1:52275');

})


결과값  


콘솔 결과값 



Posted by 이상욱1
,

express param 예제

Node js 2015. 3. 30. 11:03

/**

 * New node file

 */

var http =require('http');

var express=require('express');


var app=express();


app.use(function(request, response, next){

var name= request.param('name');

var region=request.param('region');

response.send('<h1>'+name+'-'+region+'</h1>');

});


http.createServer(app).listen(52275, function(){

console.log('server running at http://127.0.0.1:52275');

})


결과 값 




Posted by 이상욱1
,

/**

 * New node file

 */

var http=require('http');

var express=require('express');


var app =express();



app.use(function(request, response){


var output=[];

for (var i =0 ; i<3 ; i++){

output.push(

{

count:i,

name:'name-'+i

}

)

}

//응답

response.send(output);

});



http.createServer(app).listen(52275,function(){

console.log('server runnig at http://127.0.0.1:52275');

});


결과 값 





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

express 모듈과 http 모듈의 차이  (0) 2015.03.30
express param 예제  (0) 2015.03.30
nodejs jade파일에 데이타 전달 예제  (0) 2015.03.26
npm install  (0) 2015.03.25
node js url로 페이지 이동구분 주기  (0) 2015.03.25
Posted by 이상욱1
,

 var http =require('http');

 var jade= require('jade');

 var fs=require('fs');

 

 

 http.createServer(function(request , response){

 

fs.readFile('jadepage3.jade','utf8', function(error,data){

var fn=jade.compile(data);

 

response.writeHead(200,{'Content-Type':'text/html'});

response.end(fn({

name:'rintlantta',

description:'hello ejs with node js'

}));

});

 

 

 }).listen(52775 , function(){

console.log('server runnig at http://127.0.0.1:52775'); 

 });





jade 파일 


doctype html 

html

head

title index page

body

//jade string

h1 #{name}...!

h2= description

hr

- for(var i=0; i< 10 ; i++){

p

a(href="http://hand.co.kr") go to hanbit media #{i}

- }


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

express param 예제  (0) 2015.03.30
nodejs express 모듈 출력 예제  (0) 2015.03.30
npm install  (0) 2015.03.25
node js url로 페이지 이동구분 주기  (0) 2015.03.25
node js 이미지를 서비스하는경우  (0) 2015.03.25
Posted by 이상욱1
,