Skip to content

Instantly share code, notes, and snippets.

@zion830
Last active February 25, 2019 06:11
Show Gist options
  • Save zion830/c89299441125b0b5df9489d756bf25d2 to your computer and use it in GitHub Desktop.
Save zion830/c89299441125b0b5df9489d756bf25d2 to your computer and use it in GitHub Desktop.
[NodeSchool] learnyounode 도전과제 소스코드

learnyounode 공식풀이

정답을 맞췄을 때 출력되는 공식 해답

STEP 2

    var result = 0

    for (var i = 2; i < process.argv.length; i++) {
      result += Number(process.argv[i])
    }

    console.log(result)

STEP 3

    var fs = require('fs')

    var contents = fs.readFileSync(process.argv[2])
    var lines = contents.toString().split('\n').length - 1
    console.log(lines)

    // note you can avoid the .toString() by passing 'utf8' as the
    // second argument to readFileSync, then you'll get a String!
    //
    // fs.readFileSync(process.argv[2], 'utf8').split('\n').length - 1

STEP 4

    var fs = require('fs')
    var file = process.argv[2]

    fs.readFile(file, function (err, contents) {
      if (err) {
        return console.log(err)
      }
      // fs.readFile(file, 'utf8', callback) can also be used
      var lines = contents.toString().split('\n').length - 1
      console.log(lines)
    })

STEP 5

    var fs = require('fs')
    var path = require('path')

    var folder = process.argv[2]
    var ext = '.' + process.argv[3]

    fs.readdir(folder, function (err, files) {
      if (err) return console.error(err)
      files.forEach(function (file) {
        if (path.extname(file) === ext) {
          console.log(file)
        }
      })
    })

STEP 6

  • program.js
    var filterFn = require('./solution_filter.js')
    var dir = process.argv[2]
    var filterStr = process.argv[3]

    filterFn(dir, filterStr, function (err, list) {
      if (err) {
        return console.error('There was an error:', err)
      }

      list.forEach(function (file) {
        console.log(file)
      })
    })
  • mymodule.js
    var fs = require('fs')
    var path = require('path')

    module.exports = function (dir, filterStr, callback) {
      fs.readdir(dir, function (err, list) {
        if (err) {
          return callback(err)
        }

        list = list.filter(function (file) {
          return path.extname(file) === '.' + filterStr
        })

        callback(null, list)
      })
    }

STEP 7

var http = require('http')

    http.get(process.argv[2], function (response) {
      response.setEncoding('utf8')
      response.on('data', console.log)
      response.on('error', console.error)
    }).on('error', console.error)

STEP 8

var http = require('http')
var bl = require('bl')

http.get(process.argv[2], function (response) {
    response.pipe(bl(function (err, data) {
        if (err) {
          return console.error(err)
        }
        data = data.toString()
        console.log(data.length)
        console.log(data)
    }))
})

STEP 9

    var http = require('http')
    var bl = require('bl')
    var results = []
    var count = 0

    function printResults () {
      for (var i = 0; i < 3; i++) {
        console.log(results[i])
      }
    }

    function httpGet (index) {
      http.get(process.argv[2 + index], function (response) {
        response.pipe(bl(function (err, data) {
          if (err) {
            return console.error(err)
          }

          results[index] = data.toString()
          count++

          if (count === 3) {
            printResults()
          }
        }))
      })
    }

    for (var i = 0; i < 3; i++) {
      httpGet(i)
    }

STEP 10

var net = require('net')

    function zeroFill (i) {
      return (i < 10 ? '0' : '') + i
    }

    function now () {
      var d = new Date()
      return d.getFullYear() + '-' +
        zeroFill(d.getMonth() + 1) + '-' +
        zeroFill(d.getDate()) + ' ' +
        zeroFill(d.getHours()) + ':' +
        zeroFill(d.getMinutes())
    }

    var server = net.createServer(function (socket) {
      socket.end(now() + '\n')

STEP 11

    var http = require('http')
    var fs = require('fs')

    var server = http.createServer(function (req, res) {
      res.writeHead(200, { 'content-type': 'text/plain' })

      fs.createReadStream(process.argv[3]).pipe(res)
    })

    server.listen(Number(process.argv[2]))

STEP 12

    var http = require('http')
    var map = require('through2-map')

    var server = http.createServer(function (req, res) {
      if (req.method !== 'POST') {
        return res.end('send me a POST\n')
      }

      req.pipe(map(function (chunk) {
        return chunk.toString().toUpperCase()
      })).pipe(res)
    })

    server.listen(Number(process.argv[2]))

STEP 13

    var http = require('http')
    var url = require('url')

    function parsetime (time) {
      return {
        hour: time.getHours(),
        minute: time.getMinutes(),
        second: time.getSeconds()
      }
    }

    function unixtime (time) {
      return { unixtime: time.getTime() }
    }

    var server = http.createServer(function (req, res) {
      var parsedUrl = url.parse(req.url, true)
      var time = new Date(parsedUrl.query.iso)
      var result

      if (/^\/api\/parsetime/.test(req.url)) {
        result = parsetime(time)
      } else if (/^\/api\/unixtime/.test(req.url)) {
        result = unixtime(time)
      }

      if (result) {
        res.writeHead(200, { 'Content-Type': 'application/json' })
        res.end(JSON.stringify(result))
      } else {
        res.writeHead(404)
        res.end()
      }
    })
    server.listen(Number(process.argv[2]))

learnyounode 풀이

직접 푼 것

STEP 1

console.log("HELLO WORLD!");

STEP 2

var result = 0;

for (var i =2; i < process.argv.length; i++) {
    result = result + parseInt(process.argv[i]);
}

console.log(result);

STEP 3

var fs = require('fs');

var buffer = fs.readFileSync(process.argv[2]);
var strs = buffer.toString().split('\n');

console.log(strs.length - 1);

STEP 4

var fs = require('fs');

fs.readFile(process.argv[2], function(err, data) {
    var strs = data.toString().split('\n');
    console.log(strs.length - 1);
});

STEP 5

var fs = require('fs');
var path = require('path');
var extname = '.' + process.argv[3];

fs.readdir(process.argv[2], function(err, list) {
    list.forEach(element => {
        if (path.extname(element) == extname)
            console.log(element);
    });
});

STEP 6

  • program.js
var mymodule = require('./mymodule.js');
var extname = process.argv[3];

mymodule(process.argv[2], extname, 
    function callback(err, list) {
        list.forEach(element => {
            console.log(element);
        });
    });
  • mymodule.js
var fs = require('fs');
var path = require('path');
var array = Array();

module.exports = function (dir, extname, callback) {
    fs.readdir(dir, function (err, list) {
        if (err) 
            return callback(err);

        list.forEach(element => {
            ext = path.extname(element)
            if (ext.substring(1, ext.length) === extname) {
                array.push(element);
            }
        });

        return callback(null, array);
    })
}

STEP 7

var http = require('http');

http.get(process.argv[2], function (response) {
    response.setEncoding('utf8');

    response.on('data', function (data) {
        console.log(data);
    })
});

STEP 8

var http = require('http');
var bl = require('bl');

http.get(process.argv[2], function (response) {
   response.setEncoding('utf8');
       response.pipe(bl(function (err, data) {
           var str = data.toString();
           console.log(str.length);
           console.log(str);
       }));
});

STEP 9

var http = require('http');
var bl = require('bl');
var array = Array(3);
var count = 0;

for (let index = 2; index < (process.argv).length; index++) {
    const element = process.argv[index];
 
    http.get(element, function (response) {
        response.setEncoding('utf8');
        
        response.pipe(bl(function (err, data) {
            array[index] = data.toString();
            count++;

            if (count === 3)
                array.forEach(element => {
                    console.log(element);
                });
        }));
    });
}

STEP 10

var net = require('net');
var server = net.createServer(function (socket) {
    socket.end(getDate());
});

server.listen(process.argv[2]);

function getDate() {
    const date = new Date();
    let month = date.getMonth() + 1;
    let day = date.getDate();

    const minutes = date.getMinutes();
    let hours = date.getHours();

    return `${date.getFullYear()}-${
        month < 10 ? `0${month}` : month}-${
        day < 10 ? `0${day}` : day} ${
            hours < 10 ? ((hours === 0) ? '12' : `0${hours}`) : hours}:${
            minutes < 10 ? `0${minutes}` : minutes}\n`
}

STEP 11

  • 스트림 : 배열이나 문자열같은 데이터 컬렉션
  • createReadStream : 읽기 가능한 스트림을 제공
  • req : 요청에서 header나 query string 같은 속성을 가져옴
  • res : 클라이언트로 header와 body data를 보냄
var http = require('http');
var fs = require('fs');
var port = process.argv[2];
var fileDir = process.argv[3];

var server = http.createServer(function (req, res) {
    const stream = fs.createReadStream(fileDir);
    stream.pipe(res);
});

server.listen(port);

STEP 12

var http = require('http');
var map = require('through2-map'); // 스트림 데이터 변환에 사용
 
var port = process.argv[2];

function upcase(upcase) {
    return chunk.toString().toUpperCase();
}

var server = http.createServer(function (req, res) {
    res.writeHead(200, { 'content-type': 'text/plain' });

    // request와 response는 스트리밍 기능이 있다.
    req.pipe(map(function (chunk) {
        return chunk.toString().toUpperCase();
    })).pipe(res);
});

server.listen(port);

STEP 13

var http = require('http');
var url = require('url');
 
var port = process.argv[2];

function upcase(upcase) {
    return chunk.toString().toUpperCase();
}

var server = http.createServer(function (req, res) {
    res.writeHead(200, { 'content-type': 'application/json' });

    const url_data = url.parse(req.url, true);
    const date = new Date(url_data.query.iso);
    var result = '';
    
    if (url_data.pathname === "/api/parsetime") {
        var result = { 
            'hour': date.getHours(),
            'minute': date.getMinutes(),
            'second': date.getSeconds()
         };
    } else if (url_data.pathname === "/api/unixtime") {
        result = { 
            'unixtime': date.getTime()
         };
    }

    res.end(JSON.stringify(result));
});

server.listen(port);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment