Задать вопрос
@GalileoGalileu

Почему не работает 'path' (Node.js)?

Этот код:
const http = require('http');
const path = require('path');

const fs = require('fs');
const colors = require('colors');

var base = '/publicHtml';

http.createServer(function (req, res) {
    let pathname = base + req.url + '.html';
    console.log(pathname.green);

    	if (path.basename(pathname) == null) {
    		res.writeHead(404);
    		res.write('Страница не найдена 404\n');
    		res.end();
    	}else{
    		let file = fs.createReadStream(pathname);
    		res.setHeader('Content-type', 'text/html');
    		res.statusCode = 200;

    		file.on('open',function () {
    			file.pipe(res);
    		});

    		file.on('error', function (err) {
    			console.log(err.red);
    		});
    	}
    	// body...
}).listen(3000);
console.log('Server run on port 3000'.green);

Не работает
папка на месте, файл 'main.html' в ней есть
При запросе в браузере (localhost:3000/publichtml/main или main.html), в консоль выдает undifined.
  • Вопрос задан
  • 336 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@MidNightElf_1_10
неуверенный в себе фронтендер который хочет в бэк
Что касается обращения к`publichtml/main` то это не сработает поскольку вы не отслеживаете этот путь. Но если так надо, то просто сделайте так let pathname = path.join(__dirname + req.url) т.е. без вашего base
const http = require('http');
const path = require('path');

const fs = require('fs');

var base = '/publicHtml';

http.createServer(function (req, res) {
    // let pathname = base + req.url + '.html';
    let pathname = path.join(__dirname + base + req.url); // используйте path.join()

    let fileExt = path.extname(pathname); // получаю тип файла из строки в pathname

    if (!fileExt) // если тип файла не обнаружен
        pathname += '.html'; // добавить его в конце строки (соответсвенно к файлу)

  // все что ниже не изменяется
  if (path.basename(pathname) == null) {
    res.writeHead(404);
    res.write('Страница не найдена 404\n');
    res.end();
  }
    else{
    let file = fs.createReadStream(pathname);
    res.setHeader('Content-type', 'text/html');
    res.statusCode = 200;

    file.on('open',function () {
      file.pipe(res);
    });

    file.on('error', function (err) {
      console.log(err);
    });
  }
    	// body...
}).listen(3000);
console.log('Server run on port 3000');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы