[Node.js] 동기와 비동기, Call back, Post 전송 데이터

동기와 비동기

  • 동기: 순차적으로 진행
  • 비동기: 순차적 X 아래 코드로 설명하겠읍니다
//1번
console.log('A');
var result = fs.readFileSync('syntax/sample.txt', 'utf8');
console.log(result);
console.log('C');

//2번
console.log('A');
fs.readFile('syntax/sample.txt', 'utf8', function(err, result) {
    console.log(result);
});
console.log('C');

1번과 2번을 실행하면 다른 결과가 나온다. (sample.txt 내용: B)

  • 1번: A B C
  • 2번: A C B
  • 왜 그럴까? 1번은 readFileSync 함수를 이용하였는데 동기적으로 동작한다. 그래서 순서대로 A B C를 실행한 것이다. 2번은 비동기적으로 동작하는데 A가 실행된 이후에 readFile 함수가 실행되지만 출력이 되기 전에 C가 먼저 출력이 되고 그 뒤에 B가 출력이 되는 것이다.

이것처럼 동기는 순차적으로 앞의 일이 끝나야 뒤의 일이 실행이 되는 것이다. 비동기는 비유하자면 오래 걸리는 일은 지켜만 보고 있지 않고 그게 될 동안 다른 일 먼저 하는 것이다. 병렬적! node.js는 비동기적인 처리를 하기 위한 좋은 기능들을 가지고 있다.

Call Back 함수 구조

코드로 설명 ㅇㅇ

var a = function() {
  console.log('A');
}

function slowfunc(callback) {
  callback();
}

slowfunc(a);
  • 자바스크립트는 변수에 함수를 저장할 수 있다.
  • slowfunc(a): slowfunc 함수 인자로 a를 받았다. callback 함수가 a이다.
  • 그러면 slowfunc 함수가 실행된 후에 a가 실행된다.

Post 방식으로 전송된 데이터 받기

코드로 설명 ㄱㄱ

//main.js 일부
  else if (pathname === '/create_process') {
    //form의 submit 버튼을 클릭하면 /create_process로 데이터를 전송함.
    //그러니까 그 버튼을 클릭했을 때 조건 만족

    var body ='';
    request.on('data', function(data){
      body = body + data;

    });  //body 변수에 조각조각 데이터가 들어올 때마다 이어서 붙인다.

    request.on('end', function(){
      var post = qs.parse(body); //body(=입력값)를 post에 저장. 즉 post data임.
      var title = post.title; //title에 입력한 값
      var description = post.description; //description에 입력한 값
      console.log(post);
    });

    response.writeHead(200); //파일을 성공적으로 전송
    response.end('success');

  }

콘솔 출력: [Object: null prototype] { title: 'ggg', description: 'ggggg' } // 폼에 입력한 값이 배열으로 뜬다.
웹 페이지 출력: success

좋은 웹페이지 즐겨찾기