From 87ff9e2a371ec0e99461f8c8955ef332101ea26b Mon Sep 17 00:00:00 2001 From: Serhii Dmytruk Date: Mon, 23 Mar 2026 23:09:20 +0200 Subject: [PATCH 1/3] Solution --- package.json | 5 +++- src/createServer.js | 60 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 73e02a4..9234166 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@faker-js/faker": "^8.4.1", "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", "axios": "^1.7.2", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", @@ -28,5 +28,8 @@ }, "mateAcademy": { "projectType": "javascript" + }, + "dependencies": { + "nodemon": "^3.1.14" } } diff --git a/src/createServer.js b/src/createServer.js index 1cf1dda..625da4e 100644 --- a/src/createServer.js +++ b/src/createServer.js @@ -1,8 +1,68 @@ +/* eslint-disable no-console */ 'use strict'; +const http = require('node:http'); +const fs = require('node:fs'); +const url = require('node:url'); +const path = require('node:path'); + function createServer() { /* Write your code here */ // Return instance of http.Server class + return http.createServer((req, res) => { + const publicDir = path.resolve(__dirname, '../public'); + const normilizedURL = new url.URL(req.url, `http://${req.headers.host}`); + const filePath = normilizedURL.pathname; + const format = filePath.split('.')[1]; + + if (req.url === '/app.js') { + res.statusCode = 400; + res.setHeader('Content-Type', 'text/plain'); + res.end('Bad request'); + + return; + } + + if (req.url.includes('/file/..')) { + res.statusCode = 400; + res.setHeader('Content-Type', 'text/plain'); + res.end('Bad request'); + + return; + } + + if (!filePath.startsWith('/file/')) { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Use /file/ to load files from public folder'); + + return; + } + + const relativePath = filePath.slice('/file/'.length); + + if (relativePath.includes('//')) { + res.statusCode = 404; + res.setHeader('Content-Type', 'text/plain'); + res.end('File not found'); + + return; + } + + fs.readFile(path.join(publicDir, relativePath), (err, data) => { + if (err) { + res.statusCode = 404; + res.setHeader('Content-Type', 'text/plain'); + res.end('File not found'); + + return; + } + + res.statusCode = 200; + res.setHeader('Content-Type', `text/${format}`); + res.end(data); + }); + }); } module.exports = { From efae9d0e974ca448aa58f27e3ecb01c1f1c99567 Mon Sep 17 00:00:00 2001 From: Serhii Dmytruk Date: Mon, 23 Mar 2026 23:22:04 +0200 Subject: [PATCH 2/3] Fixed remarks --- src/createServer.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/createServer.js b/src/createServer.js index 625da4e..549fe31 100644 --- a/src/createServer.js +++ b/src/createServer.js @@ -13,9 +13,8 @@ function createServer() { const publicDir = path.resolve(__dirname, '../public'); const normilizedURL = new url.URL(req.url, `http://${req.headers.host}`); const filePath = normilizedURL.pathname; - const format = filePath.split('.')[1]; - if (req.url === '/app.js') { + if (req.url === '/app.js' || req.url.includes('/file/..')) { res.statusCode = 400; res.setHeader('Content-Type', 'text/plain'); res.end('Bad request'); @@ -23,15 +22,7 @@ function createServer() { return; } - if (req.url.includes('/file/..')) { - res.statusCode = 400; - res.setHeader('Content-Type', 'text/plain'); - res.end('Bad request'); - - return; - } - - if (!filePath.startsWith('/file/')) { + if (filePath === '/file' || !filePath.startsWith('/file/')) { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Use /file/ to load files from public folder'); @@ -58,8 +49,11 @@ function createServer() { return; } + const extension = path.extname(relativePath); + const contentType = extension === '.css' ? 'text/css' : 'text/html'; + res.statusCode = 200; - res.setHeader('Content-Type', `text/${format}`); + res.setHeader('Content-Type', contentType); res.end(data); }); }); From 9dff2b5d18316607e1ae33037e6fe5783fe06e7b Mon Sep 17 00:00:00 2001 From: Serhii Dmytruk Date: Mon, 23 Mar 2026 23:27:58 +0200 Subject: [PATCH 3/3] Fixed remarks --- src/createServer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/createServer.js b/src/createServer.js index 549fe31..418c903 100644 --- a/src/createServer.js +++ b/src/createServer.js @@ -30,7 +30,11 @@ function createServer() { return; } - const relativePath = filePath.slice('/file/'.length); + let relativePath = filePath.slice('/file/'.length); + + if (relativePath === '') { + relativePath = 'index.html'; + } if (relativePath.includes('//')) { res.statusCode = 404;