Node js

[Node js] ${} 표현식

usang0810 2020. 5. 20. 21:19

오픈 튜토리얼을 보면서 Nodejs를 차근차근 따라해보고 있는데 jsp에서의 EL 표현식과 비슷한 표현식을 알게 되었습니다. 사용법은 EL과 거의 똑같았지만 리터럴이 홀따옴표(')나 쌍따옴표(")가 아닌 숫자 1옆에 있는 특수문자 (`)를 리터럴로 사용해야 저 표현식이 제대로 인식되었습니다.

 

var template = '';
fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
    console.log(description);
    if(err) throw err;
    template = `
        <!DOCTYPE html>
        <html lang="ko">
        <head>
        <meta charset="UTF-8">
        <title>openTutorial start</title>
        </head>
        <body>
        <h1>${description}</h1>
        </body>
        </html>
    `;
    response.end(template);
});

그리고 response.end() 함수를 readFile 바깥에다 두었을 때 template가 빈값이었을 때로 실행이 되었습니다.

비동기 프로그램이라는 것을 더 유의해야 할 것 같습니다.

 

전체 소스 코드

더보기
var http = require('http');
var fs = require('fs');
var url = require('url');

var app = http.createServer(function(request, response){
    var _url = request.url;
    var queryData = url.parse(_url, true).query;
    console.log(queryData);
    if(_url == '/'){
        _url = '/index.html';
    }
    if(_url == '/favicon.ico'){
        return response.writeHead(404);
    }

    response.writeHead(200);

    var template = '';
    fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
        console.log(description);
        if(err) throw err;
        template = `
        <!DOCTYPE html>
        <html lang="ko">
        <head>
        <meta charset="UTF-8">
        <title>openTutorial start</title>
        </head>
        <body>
            <h1>${description}</h1>
        </body>
        </html>
        `;
        response.end(template);
    });

});
app.listen(3000);
console.log("server run...");

테스트는 data폴더를 만들고 그 안에 확장자가 없는 파일을 몇개 만들어서 넣어주시면 됩니다.

쿼리 스트링값을 제대로 인식하는지, 그 값에 해당하는 파일을 잘 불러오는지 테스트하는 코드입니다.