티스토리 뷰

web : back-end/node js

[node js] 노드 js의 비동기 실행 이해하기

무니웜테일패드풋프롱스 2020. 6. 14. 13:19

노드 js의 비동기 실행 예시

  • 아래 코드는 createServer의 콜백 함수 내부이다. 해당 조건문을 들어갔다면 req.on의 콜백함수들을 먼저 실행하는 게 아니라, req.on의 콜백함수들을 내부적으로 먼저 등록해놓고, 그 아래의 코드부터 실행해준다.
  • 따라서 res.setHeader와 res.end가 아래에서 먼저 실행되고 그 후 콜백함수 내의 리다이렉션이 실행되므로 에러가 난다. 
// createServer 콜백함수 내부 
if(url ==='/message' && method === 'POST' ){
        const body=[]; 
        req.on('data', (chunk)=>{
            console.log(chunk);
            body.push(chunk);
        });
        req.on('end' , ()=>{ // 해당 콜백 함수는 내부적으로 등록되고 추후에 실행됨 
            const parsedBody = Buffer.concat(body).toString();
            const message = parsedBody.split('=')[1]; 
            fs.writeFileSync('message.txt', message); 
            res.statusCode=302; 
            res.setHeader('Location', '/');   // 2) 따라서 이 부분에서 setHeader를 불러올수 없다는 에러가 난다
            return res.end();.
    });
       
    }
    // 1)  이 부분이 먼저 실행됨 
    res.setHeader('Content-Type', 'text/html');
    res.write( '<html>');
    res.write( '<head><title>Hello!</title> </head>');
    res.write( '<body><h1>hello from node js </h1></body>');
    res.write( '</html>');
    return res.end();

 

  • 만약 콜백 함수 내부에서 파일 저장을 마친 후, 리다이렉션을 수행하고 싶다면 아래와 같이 해당 메서드 자체를 return 해주면 된다. 
  • 어떠한 코드가 콜백함수의 내용을 모두 실행 후 동작되길 원한다면 콜백함수에 포함시켜야한다.
// createServer 콜백함수 내부 
if(url ==='/message' && method === 'POST' ){
        const body=[]; 
        req.on('data', (chunk)=>{
            console.log(chunk);
            body.push(chunk);
        });
        return req.on('end' , ()=>{ // 1) 이부분이 먼저 실행되고, 아래는 실행되지 않음 
            const parsedBody = Buffer.concat(body).toString();
            const message = parsedBody.split('=')[1]; 
            fs.writeFileSync('message.txt', message); 
            res.statusCode=302; 
            res.setHeader('Location', '/'); 
            return res.end();
    });
       
    }
    res.setHeader('Content-Type', 'text/html');
    res.write( '<html>');
    res.write( '<head><title>Hello!</title> </head>');
    res.write( '<body><h1>hello from node js </h1></body>');
    res.write( '</html>');
    return res.end();
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함