├── testdir ├── otro.c ├── texto.txt └── Profile.png ├── .gitignore ├── 01-hello-world └── hello-world.js ├── 02-baby-steps └── baby-steps.js ├── README.md ├── 03-my-first-io └── my-first-io.js ├── 07-http-client └── http-client.js ├── 06-make-it-modular ├── make-it-modular.js └── mymodule.js ├── 04-my-first-async-io └── my-first-io-async.js ├── 05-filtered-ls └── filtered-ls.js ├── 08-http-collect └── http-collect.js ├── 12-http-uppercaserer └── http-uppercaserer.js ├── 11-http-file-server └── http-file-server.js ├── package.json ├── 10-time-server └── time-server.js ├── 09-juggling-async └── juggling-async.js └── 13-http-json-api-server └── http-json-api-server.js /testdir/otro.c: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | *.log 4 | -------------------------------------------------------------------------------- /testdir/texto.txt: -------------------------------------------------------------------------------- 1 | hola 2 | este fichero 3 | tiene 4 | 4 lineas 5 | -------------------------------------------------------------------------------- /testdir/Profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/carlosazaustre/learnyounode/HEAD/testdir/Profile.png -------------------------------------------------------------------------------- /01-hello-world/hello-world.js: -------------------------------------------------------------------------------- 1 | const chalk = require("chalk"); 2 | 3 | console.log(chalk.red("HELLO WORLD")); 4 | -------------------------------------------------------------------------------- /02-baby-steps/baby-steps.js: -------------------------------------------------------------------------------- 1 | let result = 0; 2 | for (i = 2; i < process.argv.length; i++) { 3 | result += Number(process.argv[i]); 4 | } 5 | 6 | console.log(result); 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #Learn You Node 2 | > Nodeschool is a free, open-source, community-driven education platform for 3 | > learning JavaScript. 4 | 5 | [https://nodeschool.io/](https://nodeschool.io/) -------------------------------------------------------------------------------- /03-my-first-io/my-first-io.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const filename = process.argv[2]; 4 | 5 | const file = fs.readFileSync(filename, "utf8"); 6 | // const content = file.toString(); 7 | const lines = file.split("\n").length - 1; 8 | 9 | console.log(lines); 10 | -------------------------------------------------------------------------------- /07-http-client/http-client.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | 3 | const url = process.argv[2]; 4 | 5 | http 6 | .get(url, function (response) { 7 | response.setEncoding("utf8"); 8 | response.on("data", console.log); 9 | response.on("error", console.log); 10 | }) 11 | .on("error", console.log); 12 | -------------------------------------------------------------------------------- /06-make-it-modular/make-it-modular.js: -------------------------------------------------------------------------------- 1 | const mymodule = require("./mymodule"); 2 | 3 | const dirname = process.argv[2]; 4 | const ext = process.argv[3]; 5 | 6 | mymodule(dirname, ext, function (err, data) { 7 | if (err) console.log(err); 8 | 9 | data.forEach(function (file) { 10 | console.log(file); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /04-my-first-async-io/my-first-io-async.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const filename = process.argv[2]; 4 | let lines; 5 | 6 | function handleFile(err, file) { 7 | if (err) { 8 | return console.log(err); 9 | } 10 | lines = file.split("\n").length - 1; 11 | console.log(lines); 12 | } 13 | 14 | fs.readFile(filename, "utf8", handleFile); 15 | -------------------------------------------------------------------------------- /05-filtered-ls/filtered-ls.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const dirname = process.argv[2]; 4 | const ext = process.argv[3]; 5 | 6 | fs.readdir(dirname, function (err, list) { 7 | if (err) { 8 | return console.log(err); 9 | } 10 | list.forEach(function (file) { 11 | file.split(".")[1] === ext ? console.log(file) : null; 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /08-http-collect/http-collect.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | 3 | const url = process.argv[2]; 4 | 5 | http.get(url, function (request) { 6 | let result = ""; 7 | request.setEncoding("utf8"); 8 | request.on("data", function (data) { 9 | result += data; 10 | }); 11 | request.on("end", function () { 12 | console.log(result.length); 13 | console.log(result); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /12-http-uppercaserer/http-uppercaserer.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | const map = require("through2-map"); 3 | 4 | const port = process.argv[2]; 5 | 6 | const server = http.createServer((req, res) => { 7 | if (req.method === "POST") { 8 | req.pipe(map((chunk) => chunk.toString().toUpperCase())).pipe(res); 9 | } 10 | }); 11 | 12 | server.listen(port, () => { 13 | console.log("Running on port " + port); 14 | }); 15 | -------------------------------------------------------------------------------- /06-make-it-modular/mymodule.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | module.exports = function (dirname, ext, callback) { 4 | fs.readdir(dirname, function (err, list) { 5 | if (err) { 6 | return callback(err); 7 | } 8 | 9 | const result = []; 10 | list.forEach(function (file) { 11 | file.split(".")[1] === ext ? result.push(file) : null; 12 | }); 13 | 14 | callback(null, result); 15 | }); 16 | }; 17 | -------------------------------------------------------------------------------- /11-http-file-server/http-file-server.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | const fs = require("fs"); 3 | 4 | const port = process.argv[2]; 5 | const filename = process.argv[3]; 6 | 7 | const server = http.createServer((req, res) => { 8 | res.writeHead(200, { "content-type": "image/png" }); 9 | fs.createReadStream(filename).pipe(res); 10 | }); 11 | 12 | server.listen(port, () => { 13 | console.log("Running on port " + port); 14 | }); 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twitch-course-nodejs", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "hello-world.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Carlos Azaustre (https://youtube.com/carlosazaustre)", 10 | "license": "MIT", 11 | "dependencies": { 12 | "chalk": "^4.1.2", 13 | "esm": "^3.2.25", 14 | "through2-map": "^3.0.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /10-time-server/time-server.js: -------------------------------------------------------------------------------- 1 | const net = require("net"); 2 | const port = process.argv[2]; 3 | 4 | const server = net.createServer(function (socket) { 5 | const date = new Date(); 6 | const text = 7 | date.getFullYear() + 8 | "-" + 9 | String(date.getMonth() + 1).padStart(2, "0") + 10 | "-" + 11 | String(date.getDay() + 1).padStart(2, "0") + 12 | " " + 13 | String(date.getHours()).padStart(2, "0") + 14 | ":" + 15 | String(date.getMinutes()).padStart(2, "0") + 16 | "\n"; 17 | 18 | socket.end(text); 19 | }); 20 | 21 | server.listen(port); 22 | -------------------------------------------------------------------------------- /09-juggling-async/juggling-async.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | const urls = process.argv.slice(2); 3 | 4 | const httpRequest = (url) => 5 | new Promise((resolve, rejected) => { 6 | http.get(url, function (request) { 7 | let result = ""; 8 | request.setEncoding("utf8"); 9 | request.on("data", function (data) { 10 | result += data; 11 | }); 12 | request.on("end", function () { 13 | resolve(result); 14 | }); 15 | request.on("error", function (err) { 16 | rejected(err); 17 | }); 18 | }); 19 | }); 20 | 21 | Promise.allSettled([ 22 | httpRequest(urls[0]), 23 | httpRequest(urls[1]), 24 | httpRequest(urls[2]), 25 | ]).then((results) => results.forEach((result) => console.log(result.value))); 26 | -------------------------------------------------------------------------------- /13-http-json-api-server/http-json-api-server.js: -------------------------------------------------------------------------------- 1 | const http = require("http"); 2 | const url = require("url"); 3 | 4 | const port = process.argv[2]; 5 | 6 | const routes = { 7 | "/api/parsetime": (parsedUrl) => { 8 | const date = new Date(parsedUrl.query.iso); 9 | return { 10 | hour: date.getHours(), 11 | minute: date.getMinutes(), 12 | second: date.getSeconds(), 13 | }; 14 | }, 15 | "/api/unixtime": (parsedUrl) => { 16 | const date = new Date(parsedUrl.query.iso); 17 | const milliseconds = date.getTime(); 18 | return { 19 | unixtime: milliseconds, 20 | }; 21 | }, 22 | }; 23 | 24 | const server = http.createServer((req, res) => { 25 | const parsedUrl = url.parse(req.url, true); 26 | const resource = routes[parsedUrl.pathname]; 27 | 28 | res.writeHead(200, { "Content-Type": "application/json" }); 29 | res.end(JSON.stringify(resource(parsedUrl))); 30 | }); 31 | 32 | server.listen(port); 33 | --------------------------------------------------------------------------------