사용자 도구

사이트 도구


사이드바

카테고리

language:nodejs:nodejs

노드.js (node.js)

node.js

익스프레스express 프레임워크

설치

전역설치

npm install -g express-generator

윈도우즈라면 %APPDATA%\npm\node_modules에 설치된다.

프로젝트 생성

프로젝트 만들기

express <프로젝트 이름>

ejs와 pug?를 쓸수 있도록 프로젝트 만들기

express --ejs --pug --view=ejs <프로젝트이름>

설치 하고 해야할거 더 알려준다. 이런 식으로.

change directory:
    > cd <프로젝트 이름>

install dependencies:
    > npm install

run the app:
    > SET DEBUG=<프로젝트 이름>:* & npm start
  • npm install 을 실행하면 패키지를 자동으로 설치.
  • package.json 파일에 설치할 패키지 정보가 있다.

Nodemon

소스 수정시 자동으로 서버를 재시작해서 변경 내용을 바로 반영할 수 있는 도구. 개발시 매번 재시작하는 귀찮음을 해결해줌

npm install nodemon -g

커맨드를 바로 쓸 수 있어야 하니, 전역으로 설치한다.

실행

nodemon npm start

MYSQL

어 그런데, 마리아DBMariaDB를 쓰면 다른 패키지가 있네?

추가 정보 링크

설치

npm install mysql

require 설정

var mysql = require('mysql');

초기화

var _conn = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: '<계정>',
    password: '<암호>',
    database: '<접속할 DB>'
});

접속

_conn.connect(function (err) {
    if(err){
        console.error(err);
        //throw err; // throw를 해버리면 앱이 정지되니 ...
    } else {
        // 연결 성공:
    }
});

쿼리

_conn.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results[0].solution);
});

종료

_conn.end();

종료에는 두 함수를 제공

  • end() : DB 서버에 COM_QUIT 를 전송해서 끊어지는것을 유도한다. 실패시 호출할 콜백을 지정할 수 있다.
  • destroy() : 소켓을 삭제시켜 끊는다.

끊어달라고 하느냐, 내가 끊느냐 이 차이인가보다.

풀링 연결

var pool  = mysql.createPool({
  connectionLimit : 10, // 이건 개수겠지
  host            : '<접속할 도메인 or 주소>',
  user            : '<멤버 아이디>',
  password        : '<암호>',
  database        : '<디비>'
});

mysql.createPool 호출한 다음 바로 query()를 쓸 수 있다.

pool.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

위의 방법이 pool.getConnection()connection.query()connection.release() 과정을 축약한 것.

한번 사용한 디비 커넥션을 이어서 사용해야할 경우,

  • 한번 쿼리를 불렀는데 그 상태에서 이어 받아 써야할 경우가 있겟지?

pool.getConnection()으로 디비 커넥션을 얻은 다음 사용하는 방법도 있다. 아래 코드처럼 쓰는 모양.

var pool  = mysql.createPool(...);
 
pool.getConnection(function(err, connection) {
  if (err) throw err; // 연결실패
 
  // 연결 사용
  connection.query('SELECT something FROM sometable', function (error, results, fields) {
 
    // 변수'connection'은 여기에서도 쓸 수 있겠지?
 
    connection.release(); // 다 썻으면 풀에 보내기
 
    if (error) throw error; // 에러 처리를 해야할때가 있나?
    // error가 있더라도 release()는 호출되어야 한다.
 
    // 커넥션은 풀에 반환 되었기 때문에 이 시점에는 쓰면 안됨
  });
});

풀링 종료

pool.end를 호출해서 풀pool을 끊는다.

pool.end(function(err) {
  // 풀 안의 모든 커넥션이 종료됨
});

크롤링

정리중

node.js 로 크롤링

  • 필요한 것 설치
npm init -y
npm i --save axios cheerio
  • 특정 웹 응답 받은 것 보기
const axios = require('axios');
const cheerio = require('cheerio');
const log = console.log;
 
const getHtml = async () => {
    try{
        return await axios.get('https://www.facebook.com/gaming/play/599337604573403/?source=facebook~game_list~top_picks_for_user');
    }
    catch(err_) {
        console.error(err_);
    }
};
 
getHtml()
.then( html => {
    log(html);
});
//.then(res => log(res));

유니코드

// \ub9cc\uba85 = 만명
 
log(String.fromCharCode(0xb9cc));
log(String.fromCharCode(0xba85));
language/nodejs/nodejs.txt · 마지막으로 수정됨: 2022/12/07 22:30 저자 kieuns