routes.js라는 파일에 라우터를 정의해두고, 


app.js에서  import routes from './routes.js'로 사용했다


그런데 다음과 같은 에러가 발생했다.


typeerror: router.use() requires a middleware function but got a object


음 ..


router.use()는 미들웨어 기능이 필요하지만(요구되지만) Object가 있습니다?


뭔 말인가 찾아보다가..


export defalut routes;


가 없는 것을 발견했다. 이런;


추가해줬더니 에러 해결!


이런!






로 라우터를 

Posted by sungho88
,


설치를 했고, --save를 했는데도 실행이 되지 않는다.


이렇게 했는데 와 명령을 찾을 수 없다는 것인가?


해결했다.


설치를 글로벌로 해줘야 인식한다.


즉, 귀찮아서 매우 간단히 


npm i nodemon


으로 했는데...


뭔가 설치는 된 것 같은데 뭔가 좀 인식이 안 되는 것을 보니 뭔가 문제가 있는 듯 하다.


그래서 다음과같이 다시 설치했다.


npm install -g nodemon


-g로 글로벌 설치 선언을 해줬다.


그 이유를 찾았다


프로젝트의 library가 아니라 시스템에 설치하기 때문에 --global 옵션을 사용해야 한다.



원하던 노드몬이 실행된다.


노드몬이란 무엇인가?


기본적으로 node.js로 만든 파일을 실행할때는 


node xxx.js


와 같이 한다.


이러면 

 

소스를 수정하고, 

Control + C로 노드 서버 실행을 종료하고, 

다시 node xxx.js를 입력하고

개발 화면을 보면 에러가 분명 100% 있을 것이므로... 



또 소스를 수정하고, 

Control + C로 노드 서버 실행을 종료하고, 

다시 node xxx.js를 입력하고

개발 화면을 보면 에러가 분명 99% 있을 것이므로...


또 소스를 수정하고, 

Control + C로 노드 서버 실행을 종료하고, 

다시 node xxx.js를 입력하고

개발 화면을 보면 에러가 분명 98% 있을 것이므로...


또 소스를 수정하고, 

Control + C로 노드 서버 실행을 종료하고, 

다시 node xxx.js를 입력하고

개발 화면을 보면 에러가 분명 97% 있을 것이므로...


이런 무한반복하는 귀찮음을 막아주는 툴이다.


코드 수정 후 저장을 하면 자동으로, 재실행되므로 매우 효율적이다.














Posted by sungho88
,

Node.js에서는 직접 별도의 모듈을 정의하여 사용하지 않더라도 

기본적으로 수많은 내장된 모듈을 지원한다. 하지만, 너무 많기떄문에 다 외워서 사용할 수는 없다.

6개월마다 노드 버전이 바뀌고 있기때문에 기능이 빠르게 추가되고 삭제되기 때문이다.

그러므로 기본적인 사용법만을 익히고 구체적인것은 노드js


os모듈 : 그냥 현재 실행중인 컴퓨터의 운영체제에 대한 다양한 정보를 읽어올 수 있는 기능이다.

그다지 중요하진 않다. 그냥 시스템 속성보면 다 나옴..ㅋ

하여튼 중요한 것은 노드js에서 모듈을 사용하기 위해서는 require()함수를 사용한다.


var os = require('os');


그 다음에 변수 os를 사용하여 여러가지 메소드들을 호출하면 os모듈로부터 정보를 얻을 수 있다.


url 모듈 : 이 모듈을 사용하고 싶은 때 불러오는 선언은 마찮가지다. var url = require('url');

이 모듈에서 가장 대표적인 함수는 parse()함수이다.

이 함수는 일반적인 문자열  그중 URL 주소 문자열을 URL 객체로 변환하여 리턴한다.


Posted by sungho88
,

전역 변수 & 전역 객체

- 프로그램 전체에서 사용할 수 있는 변수 또는 객체를 의미함.


전역 변수

1. __filename : 현재 실행 중인 파일의 이름을 보여주는 변수

2. __dirname : 현재 실행 중인 파일의 경로를 보여주는 변수


전역 객체

1. console : 콘솔 화면과 관련된 기능을 다루는 객체

2. exports : 모듈과 관련된 기능을 다루는 객체

3. process : 프로그램과 관련된 기능을 다루는 객체



1) console 객체

1. log() : 콘솔 화면에 출력

2. time() : 시간 측정을 시작

3. timeout() : 시간 측정을 종료


log()에서 사용할 수 있는 특수 문자 : %d(숫자) %s(문자) %j(JSON)


console.log(%d + %d = %d, 4, 5, 6); 과 같이 사용


특수 문자 개수 > 매개변수의 개수라면, Ex) console.log(%d + %d + %d = %d, 4, 5, 6);

결과적으로 남는 %d는 그냥 문자로 출력 (결과 : 4 + 5 + 6 = %d)


특수 문자 개수 < 매개변수의 개수라면, Ex) console.log(%d = %d, 4, 5, 6);

결과적으로 남는 매개변수는 그냥 출력(4 = 5 6)


time() 함수와  timeout()함수는 프로그램 실행 시간을 출력할 때 사용 매개변수로 타이머를 식별.

Ex) time('programTime')  .... timeout('programTime');

이렇게 하면 time()메소드를 호출 후 timeout() 메소드가 호출되기 전까지 ...과정의 시간을 계산.


2) process객체

- 프로그램과 관련된 정보를 나타냄(컴퓨터 환경, 노드의 설치 버전, OS, 플랫폼, 등등)

- 자바스크립트엔 존재하지 않는 Node.js만의 객체


3) exports객체

- 먼저 모듈이란 기능을 쉽게 사용하고자 메소드와 속성을 미리 정의하여 모아놓은 것이다.

- Node.js는 결국 모듈들을 활용해 기능을 확장하여 프로젝트를 만들어 나아가는 것이라 할 수 있다.

- 모듈은 보통 코딩 외부에서 별도의 js파일을 생성하여 사용한다.

- 이 모듈을 생성할 때 exports 객체를 사용한다.  exports 객체에 속성이나 메소드를 지정한다.

- 이 모듈을 사용할때는 require() 함수를 사용한다.


Posted by sungho88
,

Node Package Manager


일단 모듈이라는 개념이 있다.

모듈은 쉽게 말하면 어떤 작업을 하기 위해 필요한 부분? 부품? 이라고 할 수 있다.

노드js에서는 이 모듈을 사용하기 위해 require라는 것을 사용한다.

예를들어 노드js의 가장 대표적인 예제로 나와있는 서버를 생성하는 코드를 보게 되면,


const http = require('http');


const hostname = '127.0.0.1';

const port = 3000;


const server = http.createServer((req, res) => {

  res.statusCode = 200;

  res.setHeader('Content-Type', 'text/plain');

  res.end('Hello World\n');

});


server.listen(port, hostname, () => {

  console.log(`Server running at http://${hostname}:${port}/`);

});


이렇게 되어있다. 이 코드에서  맨 윗 줄...


const http = require('http');


이 부분이 모듈을 사용하겠다고 호출하는 부분이다.
즉, http 라는 이름의 모듈을 상수 http에 집어넣고, 이 상수를 통해 모듈을 사용하겠다는 의미이다.
이렇게 별도의 설치없이 require만으로 호출하는 것은 노드js 안에 내장되어 있는 모듈만 가능하다.

http os Date String Array Math 등등 이런것들은 JavaScript가 제공하는 모듈이다.

따라서, 노드js 뿐만 아니라 자바스크립트가 동작하는 모든 곳에서 사용할 수 있다.

하여튼, 하지만, 내장된 모듈만으로는 수많은 기능을 모두 표현할 수 없을 것이다.


기본적인(내장된) 모듈을 기반으로 해서 타인의 모듈을 사용하여 편리하고 발전된 기능이 가능하다.

그래서 나온것이 NPM이다.


NPM은 노드js에서 앱 스토어와 같다.

또한 매우 간단한 설치/삭제/업그레이드/의존성 관리가 가능하다.

NPM은 노드뿐만 아니라 노드js를 기반으로 한 수많은 언어에서 NPM을 그대로 사용할 수 있다.


npm Main Page


NPM를 독립적으로 설치하는 방법


 $ npm install -g uglify
// -g : global을 의미. 설치된 컴퓨터 전역에서 사용할 수 있는 독릭적 설치
// -g 생략 : 패키지 안에서



이렇게 되면 설치완료.

-g를 붙여서 설치했으므로 어떤 디렉토리에서든 uglify를 실행할 수 있다.

못 생기게 한다??


uglifyjs --help를 입력해서 사용법을 알아보도록 하자.


테스트를 하기위해 js파일을 하나 만든다. (Fun.js)



function hello(name){

  console.log('Hi, '+name)

}

hello("Sungho");



파일에 아무렇게나(난 위처럼 작성...) 작성 한 뒤, cmd명령어로 돌아와서 


uglifyjs Fun.js 을 입력해보자.

그럼 코드가 괴상망측하게 바뀐것을 볼 수 있다.


uglify... 말그대로 코드를 못 생기게 만들었다. 도대체 왜 그런걸까.


파일에는 줄바꿈, 띄어쓰기, 들여쓰기등이 완벽하여 가독성이 뛰어나다.

하지만, 가독성을 높이기 위해 사용된 이러한 것들이 데이터의 일종이기 때문에 

네트워크를 사용해서 자바스크립트 파일을 전송한다고 하면, 이러한 쓸데없는 것들이 데이터 양을 증가시켜 비용이 많이 발생하고 시간 역시 지연을 시킨다.


따라서 uglify는 이러한 불필요한 데이터들을 싹 없애주는 기능을 하는 NPM이다.

데이터를 더욱더 줄이고 싶다면


uglifyjs Fun.js -m


-m : mangle 수축? 지역변수와 같은 것들이 한 글자로 출력되어 더욱 데이터가 절약될 수 있다.

name이라는 변수가 o가 되어 출력되었다.


Posted by sungho88
,